-3

私には独特の要件があり、解決策を見つけることができませんでした。

class Base
{
public:
    void func()
    {
       //access the member say 'var' of derived class
    }
}
  1. この場合、base から派生したすべてのクラスがメンバー 'var' を持つことが必須です。
  2. 派生クラスの名前は何でもかまいません。
4

2 に答える 2

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; 
};
于 2012-09-25T09:29:37.473 に答える
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++ にはリフレクション メカニズムがないため、必要な方法でクラスを動的に検査することは問題外です。

于 2012-09-25T09:29:12.303 に答える