父類指針可以直接指向子類對象,父類引用可以直接引用子類對象


 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 class parent{
 5 public:
 6         int mi;
 7         void add(int v){
 8                 mi += v;
 9         }
10         void add(int a,int b){
11                 mi += (a+b);
12         }
13 };
14 class child:public parent{
15 public:
16         int mv;
17         void add(int x,int y,int z){
18                 mv += (x+y+z);
19         }
20 };
21 int main(){
22         parent p;
23         child c;
24         p=c;//子類對象對父類對象賦值
25         parent p1(c);//子類對象對父類對象初始化
26         parent& rp = c;//父類引用可以直接引用子類對象 
27         parent* pp = &c;//父類指針指向子類對象
28 
29         rp.mi = 100;
30        rp.add(5);//並沒有發生同名覆蓋啊,順利編譯過
31         cout << "rp.mi=" << rp.mi << endl;//105
32         rp.add(10,10);//也沒有發生同名覆蓋,順利編譯過
33         cout << "rp.mi(10,10)=" << rp.mi << endl;//125
34 
35         //pp->mv = 35;//報錯!編譯不過!
36         //cout << "pp->mv=" << pp->mv << endl;//35
37         //pp->add(5,5,5);//50
38         return 0;
39 
40 
41 //result:
42 g++ test.cpp 
43 [48 22:03#43]$./a.out
44 rp.mi=105
45 rp.mi(10,10)=125;
父子之間的賦值兼容問題:
當使用父類指針(引用)指向子類對象的時候
①子類對象退化為父類對象
②只能訪問父類中定義的成員
③可以直接訪問被子類覆蓋的同名成員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM