多态性,纯虚函数,虚析构。

一:多态性

从代码实现上,如果调用虚函数走的流程是虚函数表,那么就是多态。

二:纯虚函数

#include "pch.h"
#include <iostream>
using namespace std;

class human
{
public:
	void fun() { }
	virtual void eat() = 0; //虚函数声明后面加上=0就成为了一个纯虚函数
	/*纯虚函数,没有函数实体,
	因为有纯虚函数的存在,所以human类成了一个
	抽象类,纯虚函数,也就是说在基类中,只给出函数的声明,而具体的
	函数实现部分交给子类去做。
	*/
};

class man :public human
{
public:
	void eat() { cout << "面食" << endl; };
};

class woman :public human
{
public:
	void eat() { cout << "米饭" << endl; }; //错误
};
int main()
{
	//human phuman; //因为是一个抽象类,所以不能定义对象。
	
	return 0;
}

三:虚析构(基类的析构函数一般写成虚函数)

#include "pch.h"
#include <iostream>
using namespace std;

class human
{
public:
	void fun() { }
	virtual void eat() { } 

	human()
	{
		cout << "human()" << endl;
	}

	 ~human()
	{
		cout << "~human()" << endl;
	}
};

class man :public human
{
public:
	void eat() { cout << "面食" << endl; };

	man()
	{
		cout << "man()" << endl;
	}

	~man()
	{
		cout << "~man()" << endl;
	}
};

class woman :public human
{
public:
	void eat() { cout << "米饭" << endl; }; 

	woman()
	{
		cout << "woman()" << endl;
	}
	~woman()
	{
		cout << "~woman()" << endl;
	}
};
int main()
{
	human *phuman = new man; 
	delete phuman; //并没有调用man的析构函数,会造成内存泄漏,
	/*那怎么办?可以把基类的析构函数写成虚析构函数就可以了,
	virtual ~human()
	{
		cout << "~human()" << endl;
	}*/

	//即使父类和子类的析构函数不同名,但是虚函数的性质还是会影响到子类当中,即动态绑定。
	return 0;
}

可参考:https://blog.csdn.net/Hackbuteer1/article/details/7558868

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值