虚函数的理解

#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();  //A
	p2->print();  //B
	delete p1;
	delete p2;
	
	system("pause");
	return 0;
}

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

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

A create
A create
B create
This is A
This is B
A delete
B delete
A delete

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值