2014-01-11 164 views
1

我必須繼承基類的受保護成員並保持派生也保護。例如:基類具有set()和get()保護,並且它們也應該在派生中受到保護。 問題是因爲它們在派生中受到保護,所以如何訪問。訪問受保護的繼承

其實我是想這樣做:

#include<iostream> 
#include<string> 
using namespace std; 
class Animal 
{ 
protected: 
    string name; 
    void setName(string a){ name = a; } 

    void getName(){ cout << name << endl; } 


}; 
class Cat :public Animal 
{ 
public: 
     Cat(string dc){ 
     setName(dc); 
} 
     void printName(){ getName(); } 
}; 
class Dog :public Animal 
{ 
public: 

    Dog(string dc2){ 
    setName(dc2); 
    } 

    void printName(){ getName(); } 
}; 
int main() 
{ 
    Cat c("Mano"); 
    c.printName(); 
    Dog d("Tommy"); 
    d.printName(); 

    system("pause"); 
    return 0; 
} 
+1

你想讓它們在派生類中受到保護,但問題是它們在派生類中受到保護?你究竟在做什麼?也許一個小代碼示例會有所幫助。 – juanchopanza

+0

如果你在基類中創建一個'protected'成員,你爲什麼要在派生類中將它'public'?如果你願意,在基類本身中創建成員'public'! –

+0

我試圖用構造函數設置值,然後我嘗試了一個公共函數,但這個東西沒有幫助。很多錯誤。 – affanBajwa

回答

-2

希望繼承類是這樣的:

class dog: public pet 
{ /* ... */ } 

請參閱輔助下的「輔助模式和繼承」 here是如何工作的。

+0

不回答這個問題! –

+0

您正在繼承受保護的公共。但繼承必須受到保護。 – affanBajwa

+0

#include using namespace std; class Cpolygon { \t protected: \t \t int width,height; \t公共: \t \t空隙input_values(INT一個,整數2) \t \t { \t \t \t寬度=之一; \t \t \t height = two; \t \t} }; 類Ctriangle:保護CPolygon的 { \t公共: \t \t INT區域() \t \t { \t \t \t回報(寬×高/ 2); \t \t} }; 類似的東西 – affanBajwa