在c ++中,是否有一种标准方法可以在基类中创建一个可以使用派生类变量的函数?
class Foo{
private:
int x;
public:
Foo(){
x = 2;
}
void print(){
std::cout << x << std::endl;
}
};
class Derived : public Foo{
private:
int x;
public:
Derived(){
x = 4;
}
};
void main()
{
Derived a;
a.print();
}
此代码打印基类的变量(2)。是否有办法使许多派生类使用的函数使用该类的私有变量而不将它们作为参数传递?
编辑:我的意图是,避免为每个派生类编写相同的代码。 例如,我想要一个get_var(),但是这个函数应该返回该类的变量。我知道我可以进行虚拟和覆盖,但我一直在寻找一种不需要一次又一次写入的方式。
答案 0 :(得分:4)
不,基类不可能直接访问派生类中的任何内容。派生类与其基类共享任何内容的唯一方法是覆盖基类的虚拟成员函数。
但是,在您的情况下,这不是必需的:派生类可以在创建x
后在基类中设置变量protected
,并将其自己的声明删除为不必要的:
class Foo{
protected: // Make x visible to derived classes
int x;
public:
Foo(){
x = 2;
}
void print(){
std::cout << x << std::endl;
}
};
class Derived : public Foo{
public:
Derived(){
x = 4;
}
};