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

来源:互联网 发布:数据库建立一对一关系 编辑:程序博客网 时间:2024/05/10 23:58

说明:只要基类的成员函数是虚函数,派生类的同名函数(参数相同,返回值类型相同),函数体不同,不管有没有显式声明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()

1 0
原创粉丝点击