1樓:
很簡單,在基類來中定義虛函源數,例如函bai數原型為: virtual void printinfo();
在類 undergraduate 及 graduate 在 printinfo 中分別du輸出各自zhi
資訊即可。
這時dao呼叫基類的 printinfo 函式就可輸出派生類資訊
2樓:匿名使用者
只需在基類中定bai義一個輸du
出函式如:
void printinfo()
在派生類中也分回別定義一個輸出函答數:
void printinfo()
呼叫時用一個基類的指標分別指向不同的派生類物件就會輸出對應物件的資訊:
比如是student *ptr;
undergraduate obju;
graduate objg;
/*初始化*/
ptr=&obju;
prt->printinfo();//輸出本科生所有資訊prt=&objg;
ptr->printinfo();//輸出研究生所有資訊
3樓:匿名使用者
定義類例項時定義為派生類的,而不是基類的。
c++的基類如何訪問其派生類的成員變數?
4樓:
直接訪問靜態變數肯定不行,但可以變通一下,通過虛擬函式獲得這個內靜態變數
給你個容例子,這樣是不是滿足你的要求?
但這樣的話,每個繼承類都要做2件事
1. 定義靜態變數
2. 重寫虛擬函式,返回自己的靜態變數
這2件事可以通過巨集來做。mfc好象就是這麼幹的#include
class a
};class b : public a
};int main()
5樓:匿名使用者
c++中派生類對基類成員的訪問形式主要有以下兩種:
1、內部訪問:由派生類版中新增成員對基類繼承來的成權員的訪問。
2、物件訪問:在派生類外部,通過派生類的物件對從基類繼承來的成員的訪問。
三種繼承方式下,派生類對基類成員的訪問規則。
1、私有繼承的訪問規則
2、公有繼承的訪問規則
3、保護繼承的訪問規則
6樓:匿名使用者
問題1:靜態變數可以通過繼承到子類裡,但是你不可能通過子類對回x進行第二次初始化,答絕對報錯
問題2:你可以在子類裡去修改這個靜態變數,但是在修改這個值之後,即使你去調基類的foo函式,x還是你在子類裡已經修改了的值,因為子類和基類的x其實是同一個,他們是同一塊記憶體。
問題3:在基類裡沒法訪問派生類的x。你可以通過多型的特性,在子類父類裡寫一個虛擬函式來設定x的值,然後通過使用a的指標去呼叫b類裡的方法。
但是對靜態變數而言沒有什麼意義,因為他們是同一個東西,在哪修改都一樣。
7樓:幻形術
基類根本就不能
bai訪問du派生類的成員,只有基類指標在zhi虛擬dao繼承鏈上即多型的情專
況下才可以訪問派生類物件
屬的成員。
你是在b的靜態建構函式中將x初始化為2,那麼請問你宣告一個a的例項變數時,有什麼地方呼叫過了派生類b的靜態建構函式了嗎?沒有吧,所以x的值當然會是1,而不是2.
如果你宣告一個b類的例項物件變數時,就會呼叫b類的靜態建構函式,但此時也只是b類就是才會訪問出結果2,跟a類沒有任何關係。當然如果當fool為虛擬繼承時,將b類變數的地址轉換成a類的指標時,此時a類的指標就能訪問出結果2了。
8樓:戈壁與清潭
無法訪問。我想你的提問有問題吧?若派生類訪問基類應該可以。你問的可能是多型方面的問題,只有宣告的基類變數 被賦值為 擴充套件類的物件時,通過其被實現的方法訪問擴充套件類的方法才行
9樓:匿名使用者
class base
;string base::ba="fool";
class derived : public base;void main()
{cout<自己
bai編譯du下zhi
就清dao楚專了屬
10樓:匿名使用者
在c++中靜態變數在記憶體中只建立一個由所有的基類和派生類共享這個變數。所以你應該看看是否初始化有沒有問題
11樓:匿名使用者
靜態變數只有一個怎麼能兩次初始化
c++中基類指標指向派生類物件可以呼叫派生類的新增成員麼
12樓:匿名使用者
no!基類指bai針告訴du
編譯器它的靜態類zhi型是基類這種型別dao,所以限定了這個指標回只能呼叫基類的自有
答成員。這個其實無關於他指向什麼型別物件。
但是,你作為這個指標的寫作者,你當然知道這個基類指標指向的是派生類物件。所以,可以將這個基類指標強制轉換為派生類指標(就是強制編譯器把這個指標靜態型別看作派生型別),靜態型別表明了一個物件 能執行的所有動作(成員函式)+它的自有屬性(資料成員),這樣派生類的新增成員就可以被這個指標呼叫了
動態繫結的重寫基類的virtual方法並不是派生類新增成員,而是重寫(override)。
13樓:欲動精靈
可以 其實這就是動態繫結嘛
該指標所繫結的物件就是派生類物件,它當然可以呼叫派生類的所有公有介面
c++中派生類如何使用基類中的資料成員
14樓:匿名使用者
如果你是派生類例項,這個結果是正確的,派生後會覆蓋基類成員。
15樓:匿名使用者
派生類中繼承了基類的資料成員,只有基類中的受保護
或者公有資料成員在被進行保護或公有繼承時才能被派生類訪問到。基類的私有成員是不可能被派生類訪問到的。你用get()函式訪問基類中的相同的資料成員,但是派生類既然已經繼承了基類,自然基類的資料成員也繼承了,這時候你訪問的派生類的成員(不是你派生之後又新增的成員)時,實際上訪問的就是基類的成員啊。
當然從實質上來看就是派生類的成員。
c++中怎樣用派生類的成員函式呼叫基類的函式? 5
16樓:
public和protected函式可以直接呼叫。
如果被過載了可以使用 「基類::函式」 這樣的形式呼叫
如果是private就不行了,除非在基類友元自己
17樓:匿名使用者
你是指在派生類成員函式中呼叫基類函式嗎?可以通過基類的類名直接訪問,比如基類a的函式fun(),在派生類b的fun()中使用a::fun()就是呼叫基類的函式了。
c++中基類能用派生類中的成員嗎
18樓:
不能。派生類可以使用基類的,但基類無法訪問派生類中的成員資料或成員函式。因為基類不可能知道它的派生類有哪些成員資料或函式。
19樓:矢的猛
不能。不能。
20樓:匿名使用者
不能,只能派生類使用基類的方法
c++中派生類如何訪問基類成員變數?
21樓:匿名使用者
t=animal.a;
這句話不行。a是一個普通成員變數,只有對一個具體的物件,才會有.a這種用法。
22樓:匿名使用者
這裡a是public的可以直接訪問
void fw()
當然為了表明它屬於基類:
可以void fw()
如果是protected的也是這樣做。
如果你把它弄成private的了,可以在基類中定義public的一個相應的gette/setterr函式即可。
如果實在不想這麼做,又想訪問,可以用指標的方法無視許可權任意塗改,當然你要知道你的目的
別弄錯了,因為正常合法是不允許這麼做的,但練習無所謂。
23樓:匿名使用者
問題1:靜態變數可以通過繼承到子類裡,但是你不可能通過子類對x進行第二次初始化,絕對報錯
問題2:你可以在子類裡去修改這個靜態變數,但是在修改這個值之後,即使你去調基類的foo函式,x還是你在子類裡已經修改了的值,因為子類和基類的x其實是同一個,他們是同一塊記憶體。
問題3:在基類裡沒法訪問派生類的x。你可以通過多型的特性,在子類父類裡寫一個虛擬函式來設定x的值,然後通過使用a的指標去呼叫b類裡的方法。
但是對靜態變數而言沒有什麼意義,因為他們是同一個東西,在哪修改都一樣。
24樓:淺淺
c++中派生類對基類成員的訪問形式主要有以下兩種:
1、內部訪問:由派生類中新增成員對基類繼承來的成員的訪問。
2、物件訪問:在派生類外部,通過派生類的物件對從基類繼承來的成員的訪問。
三種繼承方式下,派生類對基類成員的訪問規則。
1、私有繼承的訪問規則
2、公有繼承的訪問規則
3、保護繼承的訪問規則
c++中派生類如何實現對基類私有成員的訪問?
25樓:匿名使用者
派生類不能對基類私有成員進行訪問。
要在派生類中對基類成員進行訪問,可以:
1,在派生類中對基類成員的public屬性進行訪問,以間接訪問基類的私有成員;
2,在基類中將私有成員定義為protected訪問屬性,以在派生類中直接對其進行訪問;
26樓:小帥姐姐狹
基類的私有成員在派生類中是不能直接訪問的,但是基類一般會提供返回這些資料成員的方法,通過這些方法來獲取基類私有成員的值
比如基類中有一個成員變數name
一般通過getname()方法就可以訪問到
c中基類能用派生類中的成員嗎
不能。派生類可以使用基類的,但基類無法訪問派生類中的成員資料或成員函式。因為基類不可能知道它的派生類有哪些成員資料或函式。不能。不能。不能,只能派生類使用基類的方法 c 中派生類如何使用基類中的資料成員 如果你是派生類例項,這個結果是正確的,派生後會覆蓋基類成員。派生類中繼承了基類的資料成員,只有基...
C 如何確定該呼叫基類的虛擬函式還是派生類的?
昨天貌似說錯了,如果是呼叫基類和派生類之間的虛擬函式,如果是直接通過物件來呼叫那就看是誰的物件,呼叫相應的虛擬函式就行了,如果是用指標或引用呼叫是根據指標本身來確定的 因為派生類是被看作基類的物件 就是說如果呼叫物件的指標或引用是被定義為基類型別的變數那麼就會呼叫基類的虛擬函式,反之則是呼叫派生類的...
c中指向派生類指標問題,C 中指向派生類指標問題
先看兩個知識點 1.c 中基類和派生類遵循型別相容原則 即可用派生類的物件去初始化基類的物件,可用派生類的物件去初始化基類的引用,可用派生類物件的地址去初始化基類物件指標。2.c 中動態繫結條件發生需要滿足2個條件 1 只有指定為虛擬函式的成員函式才能進行動態繫結,成員函式預設為非虛擬函式,非虛擬函...