一、同名隐藏
同名隐藏,即在C++的继承中,只要子类的函数名和父类的函数名相同,子类中的函数将会隐藏所有父类中和子类的成员函数同名的函数
特别注意:
和函数之间的重载不同,这里只要求函数的名字相同,而对函数的参数列表是否相同不做要求。话句话说父类中和子类的成员函数名相同但参数列表不同的成员函数也会被隐藏
示例:
1 #include2 using namespace std; 3 class Father{ //父类 4 public: 5 Father()=default; 6 Father(int v):value(v){} 7 void show(){ 8 cout<<"调用Father类中的成员函数show()"<
二、赋值兼容规则
所谓赋值兼容规则,即在任何需要基类对象的地方都可以用该基类的公有派生类的对象来代替,它主要包括以下情况:
• 派生类的对象可以赋值给基类的对象,此时的赋值操作主要是把派生类对象中所包含的对应基类的子对象赋值给基类对象
特别注意:
反过来(即将基类对象赋值给派生类对象)不行,因为派生类对象中的新成员将无值可赋
示意图:
示例:
1 #include2 using namespace std; 3 class Father{ //父类 4 public: 5 Father()=default; 6 Father(int value):father_value(value){} 7 void show(){ 8 cout<<"Father类中的成员变量的值为:"< <
• 可以将一个派生类对象的地址赋值给其基类的指针变量
特别注意:
1.只能通过该指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员
2.此操作的本质是将指针指向派生类中由基类继承来的隐藏对象
3.不能将一个基类对象的地址赋值给一个派生类的指针变量
示意图:
示例:
1 #include2 using namespace std; 3 class Father{ //父类 4 public: 5 Father()=default; 6 Father(int value):father_value(value){} 7 void show(){ 8 cout<<"Father类中的成员变量的值为:"< < show();32 //ptr->new_func(); //错误:只能通过该指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员33 return 0; 34 }
• 派生类对象可以初始化基类的引用
特别注意:
1.只能通过该引用访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员
2.此操作的本质是为派生类中由基类继承来的隐藏对象起一个别名
3.不能用基类对象来初始化派生类的引用
示意图:
示例:
1 #include2 using namespace std; 3 class Father{ //父类 4 public: 5 Father()=default; 6 Father(int value):father_value(value){} 7 void show(){ 8 cout<<"Father类中的成员变量的值为:"< <