C多繼承不同基類同名變數處理,C 多繼承時,多個基類函式有相同名稱的變數,怎麼解決?

2021-08-04 21:39:52 字數 1951 閱讀 9373

1樓:上上西

不要聽上面的瞎說!

存在2個x

#include

using namespace std;

class a

;class b

;class c: public a, public b;int main()

這樣就區分了.

2樓:vc鳥人

無法區分,編譯通不過 報錯

可能是“x”(位於基“a”中)

也可能是“x”(位於基“b”中)

必須保證a b中變數名不相同的變數在c中呼叫

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

3樓:匿名使用者

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

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

4樓:匿名使用者

這個特性是微軟的擴充套件,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()

5樓:匿名使用者

問題出在域名查詢。

inherit::ibase2::

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

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

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

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

6樓:高禾

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是可以編譯的過,如何把兩個都在類外定義,沒有找到方法。

基類派生類的同名成員變數覆蓋問題

7樓:匿名使用者

你的理解基本很對了。基類的那個print只能訪問基類的 a,訪問不到派生類的 a的。

8樓:匿名使用者

是這個意思,可以再看看虛擬函式的相關內容可能能理

回解更深刻一些。答

c++中,在類外和類內定義一個同名變數,這兩個變數有什麼關係

9樓:匿名使用者

作用域不一樣,類內的變數會覆蓋類外的變數。所以在類內若要訪問類外同名變數,必須顯式指定其作用域.例如

int x;

class a}

10樓:匿名使用者

在類內使用的是叫區域性變數

類外是全域性變數

兩個互不相關

C 類的公有繼承,基類的私有成員在派生類中不可見或不可訪問

在c 語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼承稱為單繼承 從多個基類派生的繼承稱為多繼承。方式如下 公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員...

C 虛基類問題

首先.這個不叫虛基類 這只是一個普通繼承 基類裡面有一個虛擬函式 定義a p new c p是一個a型別的指標,但實際上p指向的是一個c型別 c型別也是a型別的一種,c繼承自a p show 的時候,因為a中的是 virtual show 即虛擬函式 所以會執行c的show 函式 這就是虛擬函式的一...

c定義虛基類Shape,在Shape類的基礎上

include using namespace std class shape void shape createshape class rectangle virtual public shape rectangle rectangle float a,float b float rectangl...