抽象类(简单描述)

本文通过鸟类与企鹅的例子,解释了抽象类的概念,指出抽象类通过纯虚函数定义接口,允许子类根据需要实现不同的功能。以圆和椭圆为例,说明了抽象类在处理共性和个性问题上的应用。代码示例展示了如何创建和使用抽象类。抽象类不能实例化,主要用于定义基类接口。
摘要由CSDN通过智能技术生成

使用一个通俗且易理解的方法来讲纯虚类,假设有鸟类,该类有个属性是鸟会飞,企鹅也属于鸟类,但企鹅不会飞,那我们不想在企鹅内部继承与飞相关的属性。在比如圆和椭圆,在数学定义中圆是属于特殊的椭圆,若我们按照定义去取椭圆为基类,会发现有很多不需要的点,比如椭圆存在长轴,短轴,同时椭圆旋转角度不一样,它的形状便不一样,这些对于圆来说都是不需要的,因此简单的将圆继承于椭圆显然不合适,因此便发明了抽象类。抽象类的申明,首先依靠于纯虚函数,virtual void food() = 0;  便为纯虚函数,即在虚函数申明之后再在虚函数后面添加一个=0。抽象类只能作为基类,同时纯虚函数可以只申明而不定义(正式因为此,所以拥有存虚函数的类只可以当基类),当编程时,对于椭圆和圆相同的部分,我们可以创建保护函数来继承(比如圆心坐标的平移),但对于不相同的地方,我们便可以采用纯虚类的方式加以区分(比如面积的计算)。

以下给出抽象类的一个简单例子:

class animal
{
public:
	void sleep() { cout << "趴着睡觉" << endl; }
	// 使虚函数等于0便创建了纯虚函数(纯虚函数可以只申明不定义),有纯虚函数的类便称为抽象类,注意纯虚函数只能放在基类里面,因此抽象类都是基类
	// 抽象类可以不定义对象
	virtual void food() = 0; 
};
class tiger :public animal
{
public:
	virtual void food() { cout << "Tiger food is meat.\n"; }
};
class cow :public animal
{
public:
	virtual void food() { cout << "cow food is gross.\n"; }
};
int main()
{
	tiger ti;
	ti.sleep();
	ti.food();

	cow co;
	co.sleep();
	co.food();
}

更详细的抽象类知识,请参照《c++primer plus》第508页。注意:抽象类,可以只定义接口,而不涉及实现。并且抽象类不能用于创建对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值