我有一個特殊的要求,並且找不到解決方案。以基類方法訪問派生類成員
class Base
{
public:
void func()
{
//access the member say 'var' of derived class
}
}
- 這是強制性的在我們的例子,從基地所有的派生類將有成員「變種」。
- 派生類的名稱可以是任何東西。
我有一個特殊的要求,並且找不到解決方案。以基類方法訪問派生類成員
class Base
{
public:
void func()
{
//access the member say 'var' of derived class
}
}
你需要一個virtual
函數,返回該成員:
class Base
{
public:
void func()
{
getVar();
}
virtual int getVar() = 0;
};
class Derived : public Base
{
int var;
virtual int getVar() { return var; }
};
將其在基類var
更好的設計,因爲它是一個共同的成員。否則,C++沒有任何反射機制,所以按照你想要的方式動態檢查類是不可能的。
'getVar()'的使用可能是一種更好的方法,因爲值可以保證更新。 –
@MarkGarcia我不清楚你是什麼想加入你的評論 – sehe
由於派生類中的所有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;
};
爲什麼不在'Base'中有'var',因爲它對所有派生來說都很常見? – hmjd
這是OO – thecoshman
的基本理論啊,「依賴倒置」。 –