指向抽象類的指標能否指向其派生類物件?
1樓:網友
當然可以,這就是c++多型性的體現。
派生類物件賦值給基類指標的問題
2樓:網友
答案是b
首先子類物件的構造必然會先構造基類的物件,所以基類的建構函式和子類的建構函式都會呼叫,所以count++了兩次,所以先輸出2
然後show是虛擬函式,通過基類指標呼叫會呼叫子類的方法,所以呼叫的是d中的show方法,所以輸出的是y,也就是120。
3樓:網友
答案啊是:2_120
因為為count在基類建構函式加了一次,在派生類建構函式也加了一次。
ptr雖然說是基類的指標,但他指向的物件是派生類的物件,因為show是虛擬函式,所以呼叫的是派生類的show函式。
c++中指向派生類指標問題
4樓:網友
先看兩個知識點:
中基類和派生類遵循型別相容原則:
即可用派生類的物件去初始化基類的物件,可用派生類的物件去初始化基類的引用,可用派生類物件的位址去初始化基類物件指標。
中動態繫結條件發生需要滿足2個條件:
1)只有指定為虛擬函式的成員函式才能進行動態繫結,成員函式預設為非虛擬函式,非虛擬函式不能進行動態繫結。
2)必須通過基類型別的引用或指標進行函式呼叫father *p=new son即是用son初始化了乙個father類指標(型別相容原則第三條);
多型(動態繫結)的實現靠的就是虛擬函式,乙個類有虛擬函式,則有虛表,father有father的虛表,son有son的虛表,用乙個vptr指標標記虛表入口。若father裡有虛擬函式fun,son重寫fun函式,則p->fun實際呼叫的是son中的fun,若son未重寫fun,則呼叫father中的fun;這就是多型(動態聯編);
5樓:志遠
p當然是指向son了,new誰就指向誰,否則還叫指標麼~~
不過如果father有虛擬函式,則物件的記憶體會有個虛擬函式表,如果son重寫了虛擬函式,那麼通過指標呼叫father的虛擬函式,實際上在虛擬函式錶轉了個彎跑son的實現裡去了。
為什麼 c++ 中,基類指標可以指向派生類物件
6樓:網友
<>p是基類指標,p指向的是綠色的部分,但可以通過轉換把讓p指向派生類(實際上p的指向的位址沒有變,只是型別變了,指向的空間的大小不一樣而已)
派生類的指標卻不能指向基類,那樣那越界,就是說小的可以變大,大的卻不能變小。
派生類指標指向基類物件,如何呼叫其成員函式
7樓:大沈他次蘋
用:pb->f();即可。
類a中有了虛擬函式就會再類的資料成員的最前面新增乙個vfptr指標(void** vfptr),這個指標用來指向乙個vtable表(乙個函式指標陣列)(乙個類只有乙個該表),該表儲存著當前類的所有 虛擬函式 的位址。這樣vfptr就成為了乙個類似成員變數的存在。訪問虛擬函式的時候通過vfptr間址找到vtable表,再間址進而找到要呼叫的函式。
這樣就在一定程度上擺脫了型別制約。
只要vptr的值不同,那麼訪問函式成員的時候使用的vtable表就不同,就可能訪問到不同類的函式成員。b類物件中的vptr指向b類自己的vtable。
當b類繼承a類的時候,因為a中有虛擬函式,編譯器就自動的給b類新增vfprt指標和vtable表。也可以理解為b類繼承來了a類中的那個vptr指標成員。
當a類指標指向b類物件時,發生假切割。要知道這個過程只是切掉a類中沒有的那些成員,由於vptr是從a類中繼承來的,所以這個量仍將保留。而對於vptr的值則不會改變,仍然指向b類的vtable表。
所以訪問f1函式的時候是通過b類的vtable表去定址的,自然就是使用子類的函式。
當b類的指標指向a類的物件時(當b類存在新增資料成員時可能出錯),同理。
而對於普通函式則受型別的制約,(因為沒有vptr指標)使用哪個類的指標呼叫函式,那麼所呼叫的就是那個累的函式。
總而言之,普通函式通過物件或指標的型別來找所呼叫的函式,而虛擬函式是通過乙個指標來找到所要呼叫的函式的。
C派生類指標指向基類物件,C 中基類指標指向派生類物件可以呼叫派生類的新增成員麼
需要知道一些常識,乙個類所有的函式都是再code 區中唯一的存放乙份。而資料成員則是每個物件儲存乙份,並按照宣告順序依次存放。類a中有了虛函式就會再類的資料成員的最前面新增乙個vfptr指標 void vfptr 這個指標用來指向乙個vtable表 乙個函式指標陣列 乙個類只有乙個該錶 該錶儲存著當...
C 基類指標指向派生類指標時,指標可以用派生類的非虛方法嗎
需要知道一些常識,一個類所有的函式都是再code 區中唯一的存放一份。而資料成員則是每個物件儲存一份,並按照宣告順序依次存放。類a中有了虛擬函式就會再類的資料成員的最前面新增一個vfptr指標 void vfptr 這個指標用來指向一個vtable表 一個函式指標陣列 一個類只有一個該表 該表儲存著...
C語言指向多維陣列的指標問題
a a 0 a 0 0 a 0 1 a 0 2 a 1 a 1 0 a 1 1 a 1 2 a 2 a 2 0 a 2 1 a 2 2 二維陣列首位址 就是二維常量指標 a可以看成是 一維指標陣列a 3 的首位址即 a的值是 a 0 a 0 的值是 a 0 0 的位址a 1的值是 a 1 a 1 的...