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;
父子之间的赋值兼容问题:
当使用父类指针(引用)指向子类对象的时候
①子类对象退化为父类对象
②只能访问父类中定义的成员
③可以直接访问被子类覆盖的同名成员