這是一個Python和C++問題。python vs C++中的多重繼承
我正在試驗多重性,我遇到了這個例子。
B1 B2
\/
D
說我有兩個(獨立?)父類B1, B2
和一個子類D
。我們只對class D
的對象感興趣。
class B1:
def f1(self):
print "In f1"
class B2:
def f2(self):
self.f1()
class D (B1, B2):
def fD(self):
self.f2()
d = D()
d.fD()
Output: In f1
有趣的(至少對我來說)是class B2
並不知道有關class B1
,但f2
可以調用self.f1()
,沒有任何問題。
我試圖複製在C++這個確切的事情,我不能讓它工作,因爲我不知道如何從f2
調用f1
做。
class B1 {
public:
virtual ~B1() {}
virtual void f1() { cout << "In f1" << endl; }
};
class B2 {
public:
virtual ~B2() {}
virtual void f2() { /* What goes here?? */ }
};
class D : public B1, public B2 {
public:
void fD() { f2(); }
};
所以,我想知道如何/爲什麼Python可以處理這個,但C++不能?
此外,我們可以對C++代碼做些什麼最小的修改,使其像Python代碼一樣?
這在Python中並不是很有趣。它只是試圖通過一個MRO(方法解析順序)樹(動態地)解析給定的屬性(它比由於所有不同的規則尋找屬性更復雜一點,但它是關於如何總結它的)。樹MR(方法解析)*始終*從接收方開始,接收方是使用self的當前對象實例 - 這也是Python允許覆蓋和多態的方式 - 而不是方法的定義類型。要調用特定類型的方法,請參閱'TheType.method(self,..)' – user2246674
@ user2246674:當類不是「新風格」(即從'object'派生)時,這是否爲真?如果這很重要,那麼應該編輯答案。 –