2010-08-25 41 views
1

有人可以給我一個例子:我如何多繼承int,從第一類和字符串,從第二類到第三類浮動?例子如何做多重繼承?

+0

該語句有點難以解析,但是我我很確定他的意思是「我如何從一個類繼承int和float *成員*以及從第二個類繼承char和string *成員」 – 2010-08-25 18:57:06

回答

0

1)您可以繼承基類 類型的加農炮。

2)正常多個 繼承看起來像這樣:

class A { /* ... */ }; 
class B { /* ... */ }; 
class C { /* ... */ }; 
class X : public A, private B, public C { /* ... */ }; 
+0

所以我只用「,」NICE – zreed 2010-08-25 18:57:43

4
class A 
{ 
    private: 
    int i; 
    float f; 
}; 

class B 
{ 
    private: 
    char c; 
    std::string s; 
}; 

class C : public A, public B 
{ 
}; 

C類型的對象現在包含成員ifc,和s。請注意,您將無法從C的方法中訪問這些成員,因爲它們分別保留爲AB。爲了從C方法中訪問這些方法,他們原本必須聲明爲publicprotected而不是private,但這不是好的設計。

+0

非常感謝! – zreed 2010-08-25 18:57:15

+2

+1有人真的讀過這個問題。 – 2010-08-25 18:58:38

+0

如何讓一個成員變量被保護而不是私人的不好設計? – Fred 2010-08-25 18:58:59

1

你的意思是繼承自int和float字段的類以及包含char和string字段的第二個類嗎?

class1 
{ 
    int anInt; 
    float aFloat; 
} 

class2 
{ 
    char aChar; 
    string aString; 
} 

class3 : public class1, public clas2 
{ 
... 
} 
+0

可以傳遞protected int,float嗎? – zreed 2010-08-25 19:02:56

2

通常情況下,不要使用多重繼承來獲得對數據的訪問(數據通常應該是私有的,所以派生類不能無論如何訪問它)。

多繼承基本上產生一個對象具有不止一組屬性。例如,考慮門,一些木材和部分鋼材:

class steel { 
    unsigned int AISI_number; 
    char Rockwell_scale; 
    unsigned int Rockwell_number; 
}; 

class wood { 
    double density; 
    std::string species; 
}; 

class door { 
    int width; 
    int height; 
    unsigned char num_hinges; 
}; 

class wooden_door : public wood, public door {}; 
class steel_door : public steel, public door {}; 

這是一個有點做作,因爲它可能是非常罕見的,我們會真正在意的鋼門(如鋼,它的1020已經硬化到羅克韋爾C40的鋼),但我希望總體思路能夠通過。 [是的,我知道所有的數據是無法訪問的,因爲它都是私有的,並且沒有代碼可以在任何類中訪問它...]