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...