C 的基類如何訪問其派生類的成員變數

2021-03-11 14:50:03 字數 3800 閱讀 2926

1樓:

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

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

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

1. 定義靜態變數

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

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

class a

};class b : public a

};int main()

2樓:匿名使用者

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

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

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

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

1、私有繼承的訪問規則

2、公有繼承的訪問規則

3、保護繼承的訪問規則

3樓:匿名使用者

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

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

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

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

4樓:幻形術

基類根本就不能

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

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

屬的成員。

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

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

5樓:戈壁與清潭

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

6樓:匿名使用者

class base

;string base::ba="fool";

class derived : public base;void main()

{cout<自己

bai編譯du下zhi

就清dao楚專了屬

7樓:匿名使用者

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

8樓:匿名使用者

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

c++中派生類如何實現對基類私有成員的訪問?

9樓:匿名使用者

派生類不能對基類私有成員進行訪問。

要在派生類中對基類成員進行訪問,可以:

1,在派生類中對基類成員的public屬性進行訪問,以間接訪問基類的私有成員;

2,在基類中將私有成員定義為protected訪問屬性,以在派生類中直接對其進行訪問;

10樓:小帥姐姐狹

基類的私有成員在派生類中是不能直接訪問的,但是基類一般會提供返回這些資料成員的方法,通過這些方法來獲取基類私有成員的值

比如基類中有一個成員變數name

一般通過getname()方法就可以訪問到

c++中派生類如何實現對基類私有成員的訪問?

11樓:寒巨集義方逸

派生類不能對基類私有成員進行訪問。

要在派生類中對基類成員進行版訪問,可以:

1,在派生類中對權基類成員的public屬性進行訪問,以間接訪問基類的私有成員;

2,在基類中將私有成員定義為protected訪問屬性,以在派生類中直接對其進行訪問;

12樓:及水風白央

基類的私有成員在派生類中是不能直接訪問的,但是基類一般會提供返回這些資料成員的方法,通過這些方法來獲取基類私有成員的值

比如基類中有一個成員變數name

一般通過getname()方法就可以訪問到

請問c++中在派生類中若要訪問基類成員要使用什麼關鍵字??

13樓:黃邦勇帥哥哥

直接訪問就行了,若是派生類覆蓋了同名的基類成員則使用::作用域解析運算子即可,若基類的成員是私有的則派生類是無法訪問基類的成員的。

示例:class a;

class b:public a

};void main()

14樓:匿名使用者

如果是基類的public或protected成員,直接訪問即可

如果是private成員,則不能訪問,是成員變數,則看有沒有提供訪問函式

15樓:匿名使用者

什麼關鍵字都不需要,直接訪問即可

如何在c++中通過派生類來訪問基類

16樓:匿名使用者

在派生類中寫

一個public函式,返回值型別屬於你要輸出的那個成員變數的型別`

在函式裡

專面只屬新增一個語句, return (該變數);

這樣,如果你想得到這個變數值, 只需呼叫這個派生類中的函式就可以了```

當然,還有一個辦法就是把基類的protected屬性改為public,不過看上去你並不想這樣用`

"在派生類的一個成員函式中要輸出基類的一個protected型別的成員變數"剛才看錯了`

你這樣做是正確的`

在派生類中可以直接訪問基類的protected成員;

我給你除錯了一下,沒有問題的,即使把那個註釋取消仍然正確`

我用的編譯系統是vs2003

--------------------------------------------

學習c++, bbs.onlycpp.***

17樓:

直接用就是了。

protected 對子類是可見的。

這樣用是沒有問題的。

你用的是啥編譯器啊?

二樓是胡說,.*** 搞久了。

18樓:

公有繼承基類,protected型別的成員變數或成員函式對子類是可見的.你的程式沒什麼問題,建議換個編譯器吧.

c++中派生類如何使用基類中的資料成員

19樓:匿名使用者

如果你是派生類例項,這個結果是正確的,派生後會覆蓋基類成員。

20樓:匿名使用者

派生類中繼承了基類的資料成員,只有基類中的受保護

或者公有資料成員在被進行保護或公有繼承時才能被派生類訪問到。基類的私有成員是不可能被派生類訪問到的。你用get()函式訪問基類中的相同的資料成員,但是派生類既然已經繼承了基類,自然基類的資料成員也繼承了,這時候你訪問的派生類的成員(不是你派生之後又新增的成員)時,實際上訪問的就是基類的成員啊。

當然從實質上來看就是派生類的成員。

C中,派生類的成員函式呼叫基類的受保護成員

不是很來清楚你的意圖 自 但是在c 中派生類的成員函式bai 是可以直接呼叫基類du的zhi受dao保護成員的。set staff modification 傳一個基類的引用,就可以在set中直接修改資料,而不是修改拷貝了。但是在基類中,你得把部門,名字,考勤情況等設定為protected.發上來看...

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

你的理解基本很對了。基類的那個print只能訪問基類的 a,訪問不到派生類的 a的。是這個意思,可以再看看虛擬函式的相關內容可能能理 回解更深刻一些。答 c 派生類成員覆蓋基類成員的問題 include using namespace std class a a a void a print cla...

關於c派生類中虛擬函式的問題,C 已經在派生類中重定義了抽象類中的純虛擬函式,為什麼還不讓我用派生類定義物件!?

如果是虛擬函式的話,在派生類中重新定義其函式體時,不會導致同名覆蓋.當用基類指標指向派生類物件並呼叫虛擬函式時,執行的是在派生類中重新定義的虛擬函式的函式體.虛擬函式必須要在基類用virtual修飾才能為虛擬函式,派生類若重定義該函專數,則無論是否有屬virtual關鍵字都是虛擬函式。你要判斷派生類...