2014-09-23 190 views
1

我很困惑如何私有變量被繼承,我得到的錯誤告訴我的變量是私有的,當我嘗試在繼承類中使用它們。私有變量繼承

一個簡單的例子。

比方說:

//dog.h 
class dog 
{ 
private: 
    bool fluffy; 
public: 
    ... 
}; 

而且我們說:

//dog.cpp 
#include "dog.h" 
... 

現在:

//shepard.h 
#include "dog.h" 
class shepard: public dog 
{ 
private: 
    ... 
public: 
    void groom(); 
}; 

和:

//shepard.cpp 
#include "shepard.h" 
void shepard::groom() 
{ 
    fluffy = false; 
} 

如果我嘗試使用新郎功能我得到一個錯誤這樣的:

error: 'bool dog::fluffy' is private 

我在做什麼錯? 可選:將來設計此解決方案的最佳方式是什麼?

+2

子類不能訪問超類'私人'變量 - 這就是他們'私人'的原因。你需要讓他們「受保護」才能做你想做的事。不過,爲了從狗身上派生牧羊人+1。 – 2014-09-23 02:11:51

回答

2

最重要的規則繼承是:

類的私有成員來自不同的同一類的成員從來沒有在任何地方訪問。

而且在私有繼承:

基類的所有公共成員成爲派生類的私有成員&
基類的所有受保護成員成爲派生類的私有成員

好閱讀:
What are access specifiers? Should I inherit with private, protected or public?

+0

非常感謝。 – 2014-09-23 02:12:39

+1

@WillyGoat:添加了我以前答案的鏈接,讓您瞭解訪問說明符和繼承。一旦你讀了它,你可以更好地理解它們,並自己決定你需要使用什麼。 – 2014-09-23 02:14:47