使用派生类变量的基类函数

Base class functions that use derived class variables

本文关键字:基类 类函数 类变量 派生      更新时间:2023-10-16

在 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((,但这个函数应该返回该类的变量。我知道我可以进行虚拟和覆盖,但我正在寻找一种不需要一次又一次写作的方式。

不,基类无法直接访问派生类中的任何内容。派生类与其基类共享任何内容的唯一方法是重写基类的虚拟成员函数。

但是,在您的情况下,这不是必需的:一旦您将其protected设置为基类,派生类就可以在基类中设置变量x,并删除其自己的声明作为不必要的:

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;
    }
};