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

Dex*_*ter -3 c++ inheritance class base-class derived-class

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

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

Xeo*_*Xeo 9

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

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; 
};
Run Code Online (Sandbox Code Playgroud)

  • @HellBoy:呃......为什么?* (6认同)
  • @HellBoy:请打你的经理.我看不出任何理由*不*这样做. (5认同)
  • 大声笑.HellBoy,这是一个有趣的评论:D (3认同)
  • @phresnel:那么取决于基类的派生类,基类应该依赖于派生类?[什么.](http://tvtropes.org/pmwiki/pmwiki.php/Main/FlatWhat)这是不是像颠覆OO*的每一个教导*? (2认同)

Luc*_*ore 6

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

class Base
{
public:
    void func()
    {
       getVar();
    }
    virtual int getVar() = 0;
};
class Derived : public Base
{
    int var;
    virtual int getVar() { return var; }
};
Run Code Online (Sandbox Code Playgroud)

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