基类与派生类之间的转换关系
一. 派生類到基類的轉(zhuǎn)換:
1.可以使用派生類指針初始化基類指針,同樣也可以使用派生類的引用或?qū)ο蟪跏蓟惖囊?#xff0c;注意這里提到的是對(duì)象的指針和引用而不是對(duì)象本身;
(但是,在使用基類指針(或引用)指向(或引用)派生類對(duì)象時(shí)需要注意以下幾點(diǎn)。
(1)把派生類對(duì)象的引用或指針轉(zhuǎn)換為基類引用或指針被稱為“向上”強(qiáng)制轉(zhuǎn)換(Up casting) , 這種轉(zhuǎn)換不需要顯式進(jìn)行(相反, 把基類指針或引用轉(zhuǎn)換為派生類指針或引用稱為“向下”強(qiáng)制轉(zhuǎn)換(Down casting) 。如果不使用顯式類型轉(zhuǎn)換, 這種“向下”強(qiáng)制轉(zhuǎn)換是不允許的。
(2)
向上“強(qiáng)制轉(zhuǎn)換后,通過(guò)基類指針只能訪問(wèn)派生類對(duì)象繼承自基類的數(shù)據(jù)成員,通過(guò)基類的引用也只能訪問(wèn)派生類對(duì)象繼承自基類的數(shù)據(jù)成員。
)
將派生類對(duì)象傳遞給希望接受基類引用的函數(shù)時(shí),不會(huì)進(jìn)行對(duì)象轉(zhuǎn)換,而是引用直接綁定到該對(duì)象,并未復(fù)制該對(duì)象;
將派生類對(duì)象傳遞給希望接受基類類型對(duì)象的函數(shù)時(shí),派生類對(duì)象的基類部分將被復(fù)制到函數(shù)的形參,派生類部分被切割;
用派生類對(duì)象調(diào)用基類的復(fù)制構(gòu)造函數(shù)和賦值操作符時(shí),也同上,即派生類對(duì)象的基類部分將被復(fù)制,派生類部分被切割;
二. 基類到派生類的轉(zhuǎn)換:
基類對(duì)象到派生類對(duì)象之間的轉(zhuǎn)換是不存在的,編譯器時(shí)錯(cuò)誤,因?yàn)榛悓?duì)象只能是基類對(duì)象,它不包含也不能包含派生類的成員,如果允許基類到派生類轉(zhuǎn)換,那么就會(huì)試圖使用派生類對(duì)象訪問(wèn)不存在的成員。
基類對(duì)象的引用或指針到派生類對(duì)象的引用或指針也是不存在的,不被允許的,編譯時(shí)錯(cuò)誤,原因同上。
例題:
【單選題】假設(shè)有以下定義:class Base{……};class Derived:public Base{……};Base b,*p;Derived d,*p2; 則以下語(yǔ)句中不正確的是()
A.b=d;
B.p=&d;
C.d=b;
D.p2 =&d;
選 C;原因?yàn)榛悓?duì)象到派生類對(duì)象之間的轉(zhuǎn)換是不存在的。
參考:添加鏈接描述
總結(jié)
以上是生活随笔為你收集整理的基类与派生类之间的转换关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++重载自增与自减运算符(前置与后置)
- 下一篇: 使用cout输出数据之使用成员函数