1樓:蔣墨徹貫戊
子類物件的引用和指標可以轉換為父類物件的引用和指標。但是,嚴格來說子類物件不可以轉換為父類物件,然而,確實可以在需要乙個父類物件的地方使用子類物件,這種是藉助於子類物件引用與父類物件引用的轉換。
以及。父類物件的copy建構函式。
實現的。例如:base
為父類,b1
是其子類。b1
b;base
a(b);這句話中就好像將子類物件b
轉茄缺換為乙個。
父類的臨時物件,然後又用這個臨時物件初始化物件a
但是,是這樣的嗎?下面來仔細分析一下。這句話中呼叫的copy建構函式的原型是。
base::base(
constbase
base);注意這個函式的引數是乙個父類物件引用。首先將乙個父類base的引用base繫結到子類物件,然後將該引用作為實參傳遞給copy建構函式。copy建構函式使用。
子類b1物件的父類部分,對a進行初始化。建構函式執行完畢,就產生了物件a。判納握。
從父類到派生類的自動轉掘慶換是不存在的。
父類物件是否可以強制轉換成子類的物件?為什麼?
2樓:汝起雲務君
實際上,父類物件是不可以強制轉化成子類的物件的。只有子類的物件向上轉型成父類物件時,這種子類轉化過來的父類物件才可以強制轉型成子類物件(注意該物件仍是子類的物件)。
如a為父類,b為子類。aa
newa();bb
b)a;//這裡就會報錯,因為該物件並不能強制轉型為子類物件。
但下面這種情況是正確的:bb
newb();aa=
a)b;bc=
b)a;
3樓:賈玉枝儀書
沒有父何來子。
有強制轉換。
那也是表面現象。
實際來說怎麼轉換他還是子類。
只是當初在開發程式設計軟體是為了。
某些必要而。
加進去的。但他還是子類。
c#子類指向父類,如何讓型別也變成父類?
4樓:魔法軟糖
a本身就可以當b使用,直接呼叫父類部分的引數就行。
你也可以建立乙個b變數指向 b1 = a;
解決方案1*(a as b)來表示,並重寫。
解決方案2*如果你想要的結果是b,放棄a的引數,請自行定義乙個複製性的建構函式。
class b
public b()
public b(b b) //複製性的建構函式。
在自行定義的方法中,建立b的例項時,copy a的所有需要保留的引數。
b b1 = new b(a); 這樣就建立了乙個新的物件,型別為b,資料是從a拷貝的。
解決方案3*不要使用繼承,而使用包含a類含有乙個b的引用,呼叫時使用,這樣就是b型別了。
總之物件導向設計思想是不允許子類轉化為父類的,如果一定要這樣,不如換別的設計實現。
c++子類向父類的顯示轉換時為什麼呼叫拷貝建構函式
5樓:大沈他次蘋
建構函式相同。
等號不會和任何拷貝(或稱複製,後面就叫複製建構函式,因為貝字超難打)建構函式相同。下面講解原因:
複製初始化與複製建構函式:複製初始化是建立乙個新物件,並且其初值來自於另乙個已存在的物件,複製初始化總是呼叫複製構差橡造函式來初始化的,複製初始化時首先使用指定的建構函式建立乙個臨時對緩鍵象,然後用複製建構函式將臨時物件的每個非static成員依次的複製到新建立的物件。複製建構函式執行的是逐個成員初始化。
注意這裡是用乙個已存在的物件建立另乙個新物件,與用建構函式直接建立乙個新物件不一樣,使用建構函式初始化時不會使用另乙個物件。比如有類hyong,則語句hyong m(1,2)呼叫建構函式直接初始化,而語句hyong n=m則是用已存在的物件m去初始化乙個新物件n,屬於複製初始化。
賦值:賦值是在兩個已存在的物件間進行的,也就是用乙個已存在的物件去改變另乙個已存在物件的值。賦值將呼叫賦值操作符對物件進行操作,比如有類hyong,有語句hyong x(1);hyong y(1,2)則x=y;這就是賦值,因為物件x和y是已經存在的物件,而語句hyong x=y;則是複製初始化,是用乙個已存在的物件y去建立乙個新物件x,所以是複製初始化。
所以你補允所問的後面兩個問題根本沒有任何意義,過載的=和複製建構函式根本就是不相同的,他們在不同的場合使用,如果兩個物件已經存在,就會使用賦值操作符,如果是使用乙個物件去建立(注意是建立)另乙個不存在的物件,則會使用複製建構函式。
另外,站長團上有產品**,便宜***。
子類和父類的轉換謝謝,Java基礎父類強制轉換成子類,錯誤
我認為是你沒加修飾符的原因。沒加的話預設是freind。關於強制轉換,就是介面和父子類這些的控制代碼處理。這些在課本上有動手練練就熟了。這個問題提的很好,動手能力也很強啊!贊一個。父類實體永遠不可能轉換成子類引用成功。父類引用的實體本身是子類例項時能轉換為子類引用。子類實體可以用父類型別引用,也可以...
c類物件怎樣分類例項化,c 類别範本物件怎樣分類例項化
勉強寫了一下,看到問題第一個想到的是這樣做 樓主能說得再具體點嗎?怎麼選擇?條件是什麼?c 中類别範本怎樣例項化物件是類型別 給個簡單的例子說明一下 template class mydata void main c 中物件例項化時有如下兩種方法 1 類名 物件名 引數 2 類名 物件名 new 類...
C中在子類中訪問父類成員的關鍵字是什麼
使用base.呼叫父類裡面的屬性 public class parent public class child parent 1 父類不能直接強制轉換成子類 2 子類可以強制轉換成父類,但是在父類中只能取父類的欄位與方法因此在一個父類對應多個子類的時候,不知道具體是哪個子類的時候,就可以先宣告一個父...