在基类方法中访问派生类成员

时间:2012-09-25 09:27:09

标签: c++ class inheritance derived-class base-class

我有一个特殊的要求,但却无法找到解决方案。

class Base
{
public:
    void func()
    {
       //access the member say 'var' of derived class
    }
}
  1. 在我们的案例中强制要求所有来自base的派生类都有成员' var'。
  2. 派生类的名称可以是任何名称。

2 个答案:

答案 0 :(得分:9)

由于派生类中的所有var都需要具有相同的类型,甚至没有任何意义,为什么不简单但它在基类中呢?

class Base
{
public:
    void func()
    {
      // use var
    }
protected: // allow derived classes to access 'var'
           // and give it a value on construction
    // where T == whatever type you want
    Base(T v) : var(v){}
    T var; 
};

答案 1 :(得分:6)

您需要一个返回该成员的virtual函数:

class Base
{
public:
    void func()
    {
       getVar();
    }
    virtual int getVar() = 0;
};
class Derived : public Base
{
    int var;
    virtual int getVar() { return var; }
};

更好的设计是在基类中使用var,因为它是一个共同的成员。否则,C ++没有任何反射机制,因此以你想要的方式动态检查类是不可能的。