先定義類A(該類有成員變數x和y),再定義類A的子類B(要求B新增成

2021-04-20 06:54:12 字數 2268 閱讀 7248

1樓:咿呀咿呀喲啊喲

class a;

class b : public a;

c++的基類如何訪問其派生類的成員變數?

2樓:

直接訪問靜態變數肯定不行,但可以變通一下,通過虛擬函式獲得這個內靜態變數

給你個容例子,這樣是不是滿足你的要求?

但這樣的話,每個繼承類都要做2件事

1. 定義靜態變數

2. 重寫虛擬函式,返回自己的靜態變數

這2件事可以通過巨集來做。mfc好象就是這麼幹的#include

class a

};class b : public a

};int main()

3樓:匿名使用者

c++中派生類對基類成員的訪問形式主要有以下兩種:

1、內部訪問:由派生類版中新增成員對基類繼承來的成權員的訪問。

2、物件訪問:在派生類外部,通過派生類的物件對從基類繼承來的成員的訪問。

三種繼承方式下,派生類對基類成員的訪問規則。

1、私有繼承的訪問規則

2、公有繼承的訪問規則

3、保護繼承的訪問規則

4樓:匿名使用者

問題1:靜態變數可以通過繼承到子類裡,但是你不可能通過子類對回x進行第二次初始化,答絕對報錯

問題2:你可以在子類裡去修改這個靜態變數,但是在修改這個值之後,即使你去調基類的foo函式,x還是你在子類裡已經修改了的值,因為子類和基類的x其實是同一個,他們是同一塊記憶體。

問題3:在基類裡沒法訪問派生類的x。你可以通過多型的特性,在子類父類裡寫一個虛擬函式來設定x的值,然後通過使用a的指標去呼叫b類裡的方法。

但是對靜態變數而言沒有什麼意義,因為他們是同一個東西,在哪修改都一樣。

5樓:幻形術

基類根本就不能

bai訪問du派生類的成員,只有基類指標在zhi虛擬dao繼承鏈上即多型的情專

況下才可以訪問派生類物件

屬的成員。

你是在b的靜態建構函式中將x初始化為2,那麼請問你宣告一個a的例項變數時,有什麼地方呼叫過了派生類b的靜態建構函式了嗎?沒有吧,所以x的值當然會是1,而不是2.

如果你宣告一個b類的例項物件變數時,就會呼叫b類的靜態建構函式,但此時也只是b類就是才會訪問出結果2,跟a類沒有任何關係。當然如果當fool為虛擬繼承時,將b類變數的地址轉換成a類的指標時,此時a類的指標就能訪問出結果2了。

6樓:戈壁與清潭

無法訪問。我想你的提問有問題吧?若派生類訪問基類應該可以。你問的可能是多型方面的問題,只有宣告的基類變數 被賦值為 擴充套件類的物件時,通過其被實現的方法訪問擴充套件類的方法才行

7樓:匿名使用者

class base

;string base::ba="fool";

class derived : public base;void main()

{cout<自己

bai編譯du下zhi

就清dao楚專了屬

8樓:匿名使用者

在c++中靜態變數在記憶體中只建立一個由所有的基類和派生類共享這個變數。所以你應該看看是否初始化有沒有問題

9樓:匿名使用者

靜態變數只有一個怎麼能兩次初始化

c++中以一個類b作為另一個類a的成員變數時的問題

10樓:匿名使用者

class b

;bai// class b只有一個帶引數du的構造zhi函dao數private:

int m_i;};

class a;

b m_b;};

11樓:匿名使用者

class b

; // class b只有一個帶引數的建構函式private:

int m_i;

};class a

;b m_b;};

12樓:匿名使用者

一個類不能作為另一類的成員,只能將一個類的物件作為另一個類的成員。只能先定義類b,然後再定義類a,類a中將類b的一個物件變數作為其成員。

定義一個實現常用數**算的類mymath,類中有3個成員變數a、b、c,有五個方法max、min、

13樓:北京巴卜技術****

輸入一個字串吧,後面的程式可能要對這個字串進行處理

科大訊飛2019筆試題 編寫類,要求該類不能被繼承,且只能例項化三次

啊,我就當做是筆試題目吧 class ok public final class function public function getinstance 如何選擇程式語言 流行程式語言介紹,想學程式設計但不知選哪種語言,不妨來這兒看看!程式語言並沒有好壞之分,只是要看自己的應用領域,只有適不適合沒...

C定義點類Point,圓類Circle,圓

看primer 就知道了 include using std cout using std endl define pi 3.14159 struct point virtual void show const struct circle public pointdouble area const ...

C類的公有繼承,基類的私有成員在派生類中不可見或不可訪問,這個不可見或不可訪問是什麼意思

外部成員無法訪問內部私有成員。從物理上講是複製過來了,在記憶體中確實有複製。但是從程式上看是被遮蔽了,不能直接呼叫。簡單的表達一下,父母跟子女。基類就是父母,子女就是派生類。基類的私有成員就好比是父母的私房錢,子女能夠繼承父母的樣貌 即公有成員 但是子女沒法使用父母的私房錢也不能知道有多少私房錢 即...