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;
父子之間的賦值兼容問題:
當使用父類指針(引用)指向子類對象的時候
①子類對象退化為父類對象
②只能訪問父類中定義的成員
③可以直接訪問被子類覆蓋的同名成員