您的位置:首页 > 其它

基类的指针指向派生类的对象

2016-01-06 09:35 253 查看
说明:只要基类的成员函数是虚函数,派生类的同名函数(参数相同,返回值类型相同),函数体不同,不管有没有显式声明virtual都是虚函数。

派生类中virtual关键字可有可无,但是也是虚函数。

#include "stdafx.h"
#include "iostream"
using namespace std;

class A
{
int x;
public:
A(int i) {x=i;}
void show()
{
cout<<"A class show():x="<<x<<endl;
}
virtual void display()
{
cout<<"A class virtual display():x="<<x<<endl;
}
};

class B:public A
{
int y;
public:
B(int i,int j):A(i) { y=j;}
void show()
{
cout<<"B class show(): y="<<y<<endl;
}
void display()//前面有无virtual都可以
{
cout<<"B class virtual display():y="<<y<<endl;
}

};
int main(int argc, _TCHAR* argv[])
{
A a(5),*pa;
B b(10,20);
pa=&b;
pa->show();
pa->display();
system("pause");
return 0;
}




结论:

基类的指针指向派生类的对象,当调用同名的成员函数时:

1)如果在基类中成员函数为虚函数,那么基类指针调用的就是派生类的同名函数。virtual void display();

     可以这么理解:因为该函数是虚的,所以会找真正实现的那个函数,所以调用派生类B中的 B class virtual display.

2)如果基类中成员函数为非虚函数,则调用的是基类的成员函数。void show();

     因为基类是非虚的,已经完全实现了,所以没有必要再调用派生类的了,就调用基类的A class show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: