(原諒提前noob問題)C++:多重繼承與多態性
我有4類:
class Person {};
class Student : public Person {};
class Employee : public Person {};
class StudentEmployee : public Student, public Employee {};
本質Person
是基類,其直接由兩者Student
和Employee
子類。 StudentEmployee
採用多重繼承的子類Student
和Employee
。
Person pat = Person("Pat");
Student sam = Student("Sam");
Employee em = Employee("Emily");
StudentEmployee sen = StudentEmployee("Sienna");
Person ppl[3] = {pat, sam, em};
//compile time error: ambiguous base class
//Person ppl[4] = {pat, sam, em, sen};
當我使用的Person
陣列,基類,我可以把Person
和所有它的子類的此陣列內。除了StudentEmployee
,給出了歧義基類的原因。
鑑於StudentEmployee
保證具有Person
的所有方法和屬性,因此StudentEmployee
被認爲是Person的一個子類?
- 如果是這樣,爲什麼編譯器不允許我將一個對象分配給它的超類型的變量?
- 如果沒有,爲什麼不;那麼完成這件事的正確方法是什麼?
乾杯
編輯:搶先,這個問題是不一樣的下面的任一:
polymorphism relates inheritance
Inheritance mucking up polymorphism in C++?
但是,很明顯,像這樣調用新內存幾乎肯定會導致內存泄漏 – Falmarri 2010-08-22 11:13:00
+1的切片。並且爲了防止bguiz不知道,這也可能是Person * ppl [] = {&pat,&sam,&em,&sen }; - 這兩個選項的內存管理略有不同。 – Michael 2010-08-22 11:19:57
@Falmarri:爲什麼?你仍然有指針數組。 – Job 2010-08-22 11:31:21