国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++繼承(二)

2019-11-08 02:18:27
字體:
來源:轉載
供稿:網友
既然繼承允許派生類訪問基礎類的成員,那么,也存在派生類和基類之間的相互轉換。派生類到基類的轉換:派生類對象也是基類對象,這意味著使用到基類的地方都可以用派生類來轉換(派生類的范圍比基類大)。又稱**向上轉型**(upcasting),這是一種安全的轉型。當派生類以public方式繼承基類時,編譯器可自動執行轉換。 1. 派生類對象指針自動轉換為基類對象指針 2. 派生類對象引用自動轉換為基類對象引用 3. 派生類對象自動轉換為基類對象(特有的成員消失)當派生類以PRivate或protected方式繼承時 1. 派生類對象指針(引用)轉換為基類對象指針(引用)需用強制類型轉換。但不能用static_cast,要用reterpret_cast。 2. 不能強制把派生類對象轉換為基類對象。下面是一個簡單的例子來說明向上轉型#include<iostream>#include<string>using namespace std;class Employee{ public: Employee(const string s,int age,int depnum) :name(s),age_(age),depnum_(depnum) { } private: string name; int age_; int depnum_; };class Manager : public Employee { public: Manager(const string s,int age,int depnum,int level) :Employee(s,age,depnum),level_(level) //調用基類的構造函數 { } private: int level_;};class Manager2 : private Employee{ public: Manager2(const string s,int age,int depnum,int level) :Employee(s,age,depnum),level_(level) //調用基類的構造函數 { } private: int level_;}; //向上轉型upcasting int main(){ Employee e1("Zhangsan",25,10); Manager m1("Lisi",32,10,2); Manager2 m2("wangwu",38,10,4); Employee *pe = &e1; //基類類型指針指向基類對象 Manager *pm = &m1; //派生類類型指針指向派生類對象 Manager2 *pm2; pm2 = &m2; pe = &m1; //向上轉換,基類指針指向派生類對象 //pm = &e1; 無法從基類指針轉換為派生類指針 e1 = m1; //派生類對象轉換為基類對象,(派生類的特有成員消失) pe = pm; //派生類對象的指針自動轉換成基類對象指針// e1 = m2; // 私有或保護繼承時,派生類對象無法(強制)轉換為基類對象 // pe = &m2; 私有或保護繼承時, 派生類指針不可以轉換成基類指針,但可以強制轉換 pe = reinterpret_cast<Employee*>(pm2); // pe = (Employee*)pm2; 與上一行作用相同 pe = (Employee*)&m2; //c風格的強制轉換 return 0;}基類到派生類的轉換: 基類對象的指針或引用可以用用強制類型轉換為派生類的對象指針(引用),而基類對象無法執行這類轉換。 向下轉型不安全,沒有自動的轉換機制。具體的做法有在派生類中編寫轉換構造函數或者在基類中重載類型轉換運算符。但沒有多大的實際意義。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阿拉善左旗| 金湖县| 西峡县| 安陆市| 都安| 洛南县| 嵊州市| 军事| 荔浦县| 庆元县| 池州市| 化州市| 镇平县| 常德市| 屏边| 德令哈市| 安陆市| 丽水市| 石台县| 分宜县| 宜丰县| 河北省| 奈曼旗| 房产| 民县| 岳普湖县| 宜宾市| 乡城县| 新干县| 天柱县| 井冈山市| 南和县| 余姚市| 蒙城县| 深水埗区| 那坡县| 昭通市| 宜兴市| 察雅县| 二手房| 汉中市|