不能实例化抽象类_C++日志(四十四)干货!带你搞清楚什么是抽象类

本文介绍了C++中的抽象类概念,包括其定义、特性和用途。解释了含有纯虚函数的类为何被称为抽象类,并且不能被实例化。通过一个Animal类和其子类Duck的例子,演示了如何使用抽象类来实现运行时的多态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5b73eec4e3f7276ccb2d0e5fb20af526.png

抽象类的定义

在C++中规定,含有纯虚函数的类称为抽象类。抽象类的特性如下:

  • 抽象类不能被实例化,不能定义抽象类的对象
  • 可以定义抽象类的指针和引用,目的是可以通过指针或引用对其子类进行操作;
  • 抽象类的子类如果没有实现其全部纯虚函数,则该子类依旧是抽象类;

抽象类不能实例化是有实际含义的,比如Animal和其子类Duck中,显然不能给Animal类定义具体对象。

抽象类的作用

根据前面的定义可知,抽象类本身不能实例化所以没有直接作用

抽象类的作用是声明类族对外的接口,抽象类本身并不提供纯虚函数的实现。当使用抽象类作为父类时,其子类如果实现了全部纯虚函数,就可以对子类进行实例化。

最重要的是,通过定义抽象类的指针和引用,可以对子类对象进行操作,实现运行时的多态

例子

(1)抽象类与子类

下面定义了抽象类Animal,及其子类Duck。抽象类含有纯虚函数eat(),子类中给出了eat()的具体实现。

class Animal {
public:
	Animal() {};
	virtual void eat() =0; 
};

class Duck :public Animal {
public:
	Duck() {};
	virtual void eat() { printf("Duck eating! n"); }
};

(2)用父类指针处理子类对象

void eat(Animal *animal) {
	animal->eat();
}

(3)调用

Duck duck;
eat(&duck);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值