继承—纯虚函数和抽象类

如果一个类只作为基类来使用,就绝不会在程序中生成基类的对象,这样基类中的disp函数的实体就不会使用。由于未使用的函数实体是一种浪费,可以把函数实体省略掉,无函数实体的虚函数叫做纯虚函数。

/*纯虚函数的定义和使用*/
#include<iostream>
using namespace std;
class test1
{
	int x;
	int y;
public:
	test1(int a,int b):x(a),y(b)
	{
	}
	int getx()
	{
		return x;
	}
	int gety()
	{
		return y;
	} 
	virtual void disp()=0; 
};
class test2:public test1
{
	int z;
public:
	test2(int a,int b,int c):test1(a,b)
	{
		z=c;
	}
	void disp()
	{
		cout<<"x="<<getx()<<endl;
		cout<<"y="<<gety()<<endl;
		cout<<"z="<<z<<endl;
	}
};
class test3:public test1
{
	int v;
public:
	test3(int a,int b,int c):test1(a,b)
	{
		v=c;
	}
	void disp()
	{
		cout<<"x="<<getx()<<endl;
		cout<<"y="<<gety()<<endl;
		cout<<"v="<<v<<endl;
	}
};
int main()
{
	test2 p(1,2,3),*q;
	test3 r(10,20,30);
	q=&p;
	q->disp();
	q=(test2 *)&r;
	q->disp();
}

在这里插入图片描述
说明:
(1)如果一个类的定义中包含纯虚函数,则不能定义该类的对象。test1 dt;编译出错。
(2)具有两个相同基类的两个派生类对象的指针也不能自动的相互转换,需要进行强制类型转换。 如:q=(test2 *)&r;
(3)在执行语句q=(test2 *)&r;之后,由q所调用的函数必须是在test2类中存在的函数(test1类中可以不存在),否则会出错。

抽象类
包含纯虚函数的类被称为抽象类,也就是在抽象类中包含没有函数体定义的函数。
抽象类是不能定义对象的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值