C++继承:同名隐藏、覆盖,虚函数(2)

类型兼容规则:在需要基类的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。

类型兼容规则中所指的替代包括以下的情况:

派生类的对象可以隐含转换为基类对象。

派生类的对象可以初始化基类的引用。

派生类的指针可以隐含转换为基类的指针。

在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。

代码3中的new B()返回一个指向B对象的指针,之后隐式转换为指向A的指针a,因为a是指向A类对象的指针,因此可以用a来访问继承自A的类B的对象,但是a只能使用继承自A的成员。

根据赋值兼容规则,可以使用派生类的对象替代基类对象。如果用基类类型的指针指向派生类对象,就可以通过这个指针来访问对象,问题是访问到的只是从基类继承来的同名成员。解决这一问题的方法是:如果需要通过基类的指针指向派生类的对象,并访问某个与基类同名的成员,那么首先在基类中将这个同名函数说明为虚函数。这样,通过基类类型的指针,就可以使属于不同派生类的不同对象产生不同的行为,从而实现运行过程的多态。

将代码3稍作修改:

代码4:

#include<iostream>    using namespace std;   class A   {       public:          virtual void print(){           cout<<"A print !"<<endl;       }   };      class B:public A   {              public:       void print(){           cout<<"B print !"<<endl;       }   };      int main(){       A *a=new B();       a->print();       return 0;   }     

C++继承:同名隐藏、覆盖,虚函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/psszf.html