c多重繼承父類存在同名函式,C 多重繼承 父類存在同名函式

2021-08-04 21:38:49 字數 2079 閱讀 6523

1樓:匿名使用者

這個特性是微軟的擴充套件,c++ primer講的是標準c++,所以不會有這個內容。

解決辦法:把ibase宣告為__inte***ce__inte***ce ibase1;

__inte***ce ibase2;

class inherit : public ibase1, public ibase2;

void inherit::ibase1::f()void inherit::ibase2::f()

2樓:匿名使用者

問題出在網域名稱查詢。

inherit::ibase2::

這個含義代表從inherit類網域名稱找ibase2類網域名稱再找fun1.

嘗試把inherit::去掉吧,沒什麼用。

這個既不是多型,也不過載,感覺只是把基類的虛函式的實現改到子類中實現了,實現的還是基類的函式。但語法上還是純虛函式,不能例項化。

而實際上子類並沒有生成虛函式,只有乙個vptr,而vtable裡面沒有函式。

3樓:高禾

class ibase1;

class ibase2;

class inherit:

public virtual ibase1, virtual public ibase2virtual int ibase2::func1();//};int inherit::func1()main中

ibase1 *p1 = new inherit(); //列印 「ibase1 func1」

p1->func1();

ibase2 *p2 = new inherit(); //列印"ibase2 func1"

p2->func1();

vc2005是可以編譯的過,如何把兩個都在類外定義,沒有找到方法。

c++多繼承時,多個基類函式有相同名稱的變數,怎麼解決?

4樓:匿名使用者

可使用虛基類d a,b同名函式和資料作為共性由抽象類d派生出來,這樣多繼承a與b時的c可以只繼承重複函式或資料中的乙個。

c++中子類繼承父類,為何可以在子類和父類中命名相同名字的函式?

5樓:匿名使用者

你執行一bai

下下面的代du碼,就明白了zhi

。class c

};class b : public c

};class a : public b

void btest()

void ctest()

};void main()

ps:如果是虛函式,而dao且派生類的函式籤專名屬與基類的簽名一致,那麼,基類的該同名函式指標已經被覆蓋了,所以,就不可能再呼叫到基類的同簽名函式了。非虛函式才可以使用上面的方面來呼叫。

6樓:匿名使用者

這就是c++的多型了。。

虛函式應用,可以區分。

如果子類要呼叫父類的函式,可以不再宣告該函式,前提 是基類不要是純虛的。

7樓:求是的夢

這種行為被稱為overwrite

c++多重繼承,我這裡幾個函式名相同的函式,引數個數不同為什麼同名覆蓋而不是過載?

8樓:匿名使用者

函式過載是

copy是根據函式的引數列表區分函式的版本,返回值不同是不能區分的。

比如 int fun( int a,int b);

在編譯的時候,編譯器編譯函式,生成乙個類似"_fun_int_int"的名稱放在庫中,以便程式呼叫的時候使用。

如果你想過載void fun( int a,int b);

生成的函式名稱也是"_fun_int_int"

函式在庫中的名稱是唯一的,就像你在程式中定義變數一樣。

這就算是重定義吧(姑且這麼說),這時編譯器該呼叫哪個函式?

c++派生類中允許有相同名字相同引數的函式嗎

9樓:匿名使用者

允許啊,這樣不就是 oop 的多型性麼

C語言for的多重迴圈C語言for的多重迴圈是怎麼一回事啊能給小弟詳細講解以下嗎

舉例子有點難,要不直接講一下。首先,定義迴圈,將i的起始值設為1,迴圈條件為i 10 也就是i的尾值為9 然後在內部定義巢狀迴圈,將j的起始值設為1,迴圈條件為j i 這是全迴圈裡最難理解的,這個巢狀迴圈尾值是i當時的值,比如當時i的值為8,那麼j將會從1執行到8 所以執行順序可以這樣理解 1,確定...

c 虛繼承有什麼缺點,C 中虛繼承和一般的繼承有什麼不同

不能抄說是缺點,只能說是特點。b c虛繼承a的話,那麼任何繼承b c的類都得指定如何構造其中包含的a。如果不是繼承,那麼類b c分別各自指明如何構造其中包含的a,繼承b c的類無需再指明也不能指明如何構造其中包含的a。虛繼承的話,虛基類必須由每個最後派生的類初始化 普通繼承的話,基類由這個基類直接派...

C 程式設計,繼承與派生

include include using namespace std class instring virtual instring 輸入函式 void input cin.getline buf,1024 str new char strlen buf 1 strcpy str,buf str ...