虚函数的理解

来源:互联网 发布:淘宝网怎么修改密码 编辑:程序博客网 时间:2024/04/30 08:40
#include<iostream>using namespace std;class A{public: A(){ cout<<" A create\n";};virtual ~A(){ cout<<"A delete\n";};virtual void print(){ cout<<"This is A\n"; }};class B:public A{public:B(){ cout<<" B create\n";};~B(){ cout<<"B delete\n";};void print(){ cout<<"This is B\n";}};int main(){A * p1 = new A;  A * p2 = new B;  p1->print();  //Ap2->print();  //Bdelete p1;delete p2;system("pause");return 0;}

之前对虚函数一直一知半解,现在把总结的内容记录下来。C++的面向对象的一个特征就是多态,即一切用指向基类的指针来操作对象。指向基类的指针在操作它的多态时,会根据不同对象,调用其相应的函数,前提是这些函数都是虚函数。派生类指针调用派生类对象的时候则是正常的情况。

以上代码执行的结果如下:

A createA createB createThis is AThis is BA deleteB deleteA delete

可以总结的知识点:1.如果为虚函数,派生类会覆盖基类的所对应的函数实现。2. 虚析构函数则不会被覆盖,即delete 基类对应的派生类指针时,先调用派生类的析构函数,再调用基类的虚析构函数。3. 构造函数不能定义为虚函数。

此时如果生成A a, B b,同时sizeof(a),sizeof(b),结果为4,这是因为虚函数内部实现使用指针,而将virtual去掉的话,结果都是1。

0 0
原创粉丝点击