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 class circle 求圓周長 public float getcircumference 求圓面積 public flot getarea public class cylinder circlepublic float getsu cearea 測試這兩個類 class pro...
虛繼承的類大小問題,虛繼承,派生類重寫基類虛擬函式,派生類大小的問題,具體看程式碼
虛繼承 是物件導向程式設計中的一種技術,是指一個指定的基類,在繼承體系結構中,將其成員資料例項共享給也從這個基型別直接或間接派生的其它類。虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如下圖所示。類d繼承自類b1 b2,而類b1 b2都繼承自類a,因此出現如右圖所示的局面 非虛基...
採用C定義圓柱類Cylinder,繼承圓類Ci
include include using namespace std define pi 3.14159 class circle 圓類 class cylinder public circle 圓柱類繼承圓類 cylinder float r,float h 解構函式 cylinder radi...