同名隐藏和赋值兼容规则
子类函数名与父类函数名相同,子类函数将隐藏所有父类的同名函数
基类与派生类赋值兼容规则
1.派生类的对象可以赋值给基类的对象,这时是吧派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象(对象的切片)。反过来则不行,因为派生类的新成员无值可赋。
2.可以将一个派生类的对象的地址赋值给其基类的指针变量,但是只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不可反过来做。
3.派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。
//Test.h
#include<iostream> using namespace std; class Father { private: short a; public: Father():a(0){} ~Father(){} void show(); void show(int); void print(); }; class Son : public Father { private: int b; public: Son():b(0){} ~Son(){} void show(); }; void Father::show() { cout<<"This is Father show(). "<<endl; } void Father::show(int) { cout<<"This is Father show(int). "<<endl; } void Father::print() { cout<<"This is Father print(). "<<endl; } void Son::show() { cout<<"This is Son show(). "<<endl; }
//Test.cpp #include"Test1.h" void main() { Son s; Father f = s;//1.派生类的对象可以赋值给基类的对象,这时是吧派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象(对象的切片)。 f.show(); //反过来则不行,因为派生类的新成员无值可赋。 f.show(0); s.show(); //子类函数名与父类函数名相同,子类函数将隐藏所有父类的同名方法 Father *pf = &s;//2.可以将一个派生类的对象的地址赋值给其基类的指针变量,但是只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不可反过来做。 Father &qf = s;//3.派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。 pf->show(); qf.show(); }
运行结果为
不积小流无以成江河