2014-09-25 56 views
1

在C++中,是否有一種標準方法可以在可以使用派生類變量的基類中創建函數?使用派生類變量的基類函數

class Foo{ 
private: 
    int x; 
public: 
    Foo(){ 
     x = 2; 
    } 
    void print(){ 
     std::cout << x << std::endl; 
    } 
}; 

class Derived : public Foo{ 
private: 
    int x; 
public: 
    Derived(){ 
     x = 4; 
    } 

}; 


void main() 
{ 
    Derived a; 
    a.print(); 
} 

此代碼打印基類(2)的變量。有沒有辦法使許多派生類使用的函數使用類的私有變量而不將它們作爲參數傳遞?

編輯:我的意圖是,避免爲每個派生類編寫相同的代碼。 例如,我想要一個get_var(),但是這個函數應該返回自己類的變量。我知道我可以做出虛擬和重寫,但我正在尋找一種我不需要一次又一次寫入的方式。

+4

的基類應該不知道它的派生類型。要求這是一個糟糕的設計。 – juanchopanza 2014-09-25 12:20:42

+2

你需要實現一個虛擬的'getA'方法。 – 2014-09-25 12:20:43

+2

如果您將'x'聲明爲在Foo中受到保護,而不是在Derived中再次聲明它。那是你要的嗎? – Albi 2014-09-25 12:21:22

回答

4

不,基類不可能直接訪問派生類中的任何內容。派生類與基類共享任何東西的唯一方法是通過重寫基類的虛擬成員函數。

在你的情況,然而,這是沒有必要的:在派生類中可以設置變量x在基類中,一旦你把它protected,丟棄了自己的聲明是不必要的:

class Foo{ 
protected: // Make x visible to derived classes 
    int x; 
public: 
    Foo(){ 
     x = 2; 
    } 
    void print(){ 
     std::cout << x << std::endl; 
    } 
}; 

class Derived : public Foo{ 
public: 
    Derived(){ 
     x = 4; 
    } 
}; 
+0

會覆蓋基類x嗎?如果我做出多個派生,他們都會共享相同的X /值? – user3023605 2014-09-25 12:30:48

+0

@ user3023605派生類的每個實例也都有一個基類的實例。所以不,每個實例都有自己的'x' – clcto 2014-09-25 12:32:34

+0

這正是我所期待的!謝謝!我希望他的方法沒有缺點。 – user3023605 2014-09-25 12:34:22

相關問題