c++ 虚函数以及抽象类

虚函数:

引入目的:

多态性,动态绑定,c++的多态性通过虚函数来实现的。

抽象类:

引入目的:

1、方便使用多态特性,需要在基类中定义虚函数。

2、有些情况下,不允许基类本身生成对象,e.g. 动物可以派生出狗、猫等子类,这些子类可以生成相应对象,但是动物本身不应生成对象,明显不合理。

c++ 中抽象类的实现是通过定义纯虚函数来实现的,在类中定义了纯虚函数的类被称为抽象类,该类不可以被实例化。

定义纯虚函数:

virtual returnType functionName(parameter list)=0

纯虚函数必须在基类中声明,在基类中未被定义,要求派生类都要定义自己的实现方法。

虚函数:

该函数在基类中被声明为virtual,但是可以有基类进行定义,派生类中可以重新定义,可以实现动态重载。

e.g.抽象类代码:

#include <iostream>

using namespace std;

class A{
private:
	int data;
public :
	A():data(0){}
	virtual int a()=0;  //纯虚函数,A为抽象类
	virtual int getData(){
		return data;
	}
	void setData(int a)
	{
		data=a;
	}
};
class B:public A{
	int d;
public:
	B():d(1){}
	int a(){
		return d+1;
	}
	int getData()
	{
		return d;
	}
};
int main()
{
//	A a;     抽象类不可被实例化
//	cout<<a.getData()<<endl;
	B b;
	cout<<b.getData()<<endl;
	cout<<b.a()<<endl;

	return 0;
}


虚函数举例:

#include <iostream>

using namespace std;

class A{
private:
	int data;
public :
	A():data(0){}
//	virtual int a()=0;
	virtual int getData(){
		return data;
	}
	void setData(int a)
	{
		data=a;
	}
};
class B:public A{
	int d;
public:
	B():d(1){}
	int a(){
		return d+1;
	}
	int getData()
	{
		return d;
	}
};
int main()
{
	A a;
	cout<<a.getData()<<endl;
	B b;
	cout<<b.getData()<<endl;
	cout<<b.a()<<endl;

	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值