2012-09-25 164 views
-3

我有一個特殊的要求,並且找不到解決方案。以基類方法訪問派生類成員

class Base 
{ 
public: 
    void func() 
    { 
     //access the member say 'var' of derived class 
    } 
} 
  1. 這是強制性的在我們的例子,從基地所有的派生類將有成員「變種」。
  2. 派生類的名稱可以是任何東西。
+7

爲什麼不在'Base'中有'var',因爲它對所有派生來說都很常見? – hmjd

+0

這是OO – thecoshman

+0

的基本理論啊,「依賴倒置」。 –

回答

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++沒有任何反射機制,所以按照你想要的方式動態檢查類是不可能的。

+0

'getVar()'的使用可能是一種更好的方法,因爲值可以保證更新。 –

+1

@MarkGarcia我不清楚你是什麼想加入你的評論 – sehe

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

我認爲這個,但我們不想這樣實現 – Dexter

+6

@HellBoy:呃...... *爲什麼?* – Xeo

+3

大聲笑。 HellBoy,這是一條有趣的評論:D – Griwes

相關問題