Person* person=new Student();
其中Person類是Student類的父類,為什么子類物件的指標為什么可以給父類物件的指標賦值?是不是首先將子類物件指標強制轉換為父類物件的指標,然后給person指標賦值?
uj5u.com熱心網友回復:
好久之前看過不太確定,這個是將子類物件賦值給父類,父類可以指向子類繼承父類的成員,和虛函式重寫的成員,但是不能指向子類獨有的成員,好像是這樣
uj5u.com熱心網友回復:
如果不能賦值,多型還怎么實作
uj5u.com熱心網友回復:
某一型別的指標只能指向其型別變數,如果不是就需要型別轉換但為了實作多型,必須要基類指標指向派生類物件,所以編譯器就默許這種行為了
uj5u.com熱心網友回復:
Student也是Person但Person不一定是Student
uj5u.com熱心網友回復:
父類物件的指標是否能強制轉換為子類物件的指標?例如:Person *person=new Person();
Student *student=(Student *)person;
uj5u.com熱心網友回復:
Person 不一定是 Student,所以會有轉換失敗。
父類轉子類需要使用dynamic_cast,強轉是錯誤的。
uj5u.com熱心網友回復:
能,程式員要自己對其后果負責。
就上面程式來說,大概會發生未定行為。
uj5u.com熱心網友回復:
C++四大轉換中動態轉換dynamic_cast,就是專門 在繼承體系中轉換的派生類(指標,參考)可以隱式轉換為基類(指標,參考),
是面向物件的基本特征之一
多型全靠它,才能方便的實作
uj5u.com熱心網友回復:
同c++物件模型有關uj5u.com熱心網友回復:
Student 就是一個person,子類就是父類的一種,給他的指標賦值沒問題的。uj5u.com熱心網友回復:
不行,這樣子類就有可能呼叫父類中根本不存在的函式方法轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101688.html
標籤:C++ 語言
上一篇:約瑟夫問題
下一篇:按位左移,高位為啥沒棄
