C++入门经典 笔记 (第十七章)使用多态和派生类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishanlu136/article/details/48227161

多态即意味着具有多种形态,要使用多态,必须明白前一章所说的派生类的对象也可视为基类对象。将这些派生类对象视为基类对象而调用基类方法时,便使用了多态。

要使用多态,可声明一个基类指针,并将在堆中创建一个派生类对象的地址赋给它。比如(基类:Mammal和派生类:Dog),由于派生类对象也是基类对象,所以下面的代码是合法的:Mammal *  pMammal = new  Dog; 然后就可以用该指针对Mammal调用任何成员函数。在调用重写了的函数时,将根据指针指向的对象类型,调用正确的函数。注意:在基类中,被调用的重写的函数必须用virtual关键字修饰,即它是虚函数。不然,当调用该函数时,就会实现基类的方法而不是指针指向的对象的方法,这就达不到多态的效果了。

不能通过基类指针访问派生类特有的方法

如果Dog有成员函数WagTail(),但是Mammal没有,就不能通过Mammal指针来访问它(除非将其转换为Dog指针)。

使用虚成员函数的代价

包含虚成员函数的类必须维护一个虚函数表(v-table),因此使用虚函数会带来一些开销,如果类很小,并且不打算从它派生出其他类,就根本没必要使用虚函数。

问:如果基类的一个函数(Somefunc())是虚函数,且被重载以便能接受一个或两个int参数,而在派生类重写了接受一个int参数的版本,那么通过指向派生类对象的指针调用接受两个int参数的函数时,将调用哪个函数?

答:重写接受一个int参数的版本将隐藏基类中所有同名函数,因此将出现编译出错,指出该函数只接受一个int参数。


猜你喜欢

转载自blog.csdn.net/lishanlu136/article/details/48227161
今日推荐