纯虚函数和抽象类

本文详细介绍了纯虚函数的概念及其在C++中的应用,包括如何声明纯虚函数及其实现方式。此外,还解释了抽象类的概念,以及如何通过抽象类来组织相关的子类。

纯虚函数:
纯虚函数是一种特殊的虚函数,格式如下:
class <类名>
{
  virtual <类型><函数名>(<参数表>)=0;
  …
};
基类中不对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。

抽象类:
 带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。

抽象类不能实例化 (  new的时候实例化)   

转载于:https://www.cnblogs.com/jcss2008/archive/2009/03/25/1421052.html

### 纯虚函数抽象类的概念及关系 #### 纯虚函数的定义 纯虚函数是一种在基类中声明但未提供具体实现的虚函数。它通过在函数声明后添加`= 0`来表示,表明该函数必须由派生类实现[^1]。纯虚函数的存在使得基类成为一个抽象类,无法直接实例化。 ```cpp class Base { public: virtual void pure_virtual_function() = 0; // 纯虚函数 }; ``` #### 抽象类的定义 包含纯虚函数的类被称为抽象类抽象类不能直接创建对象,其目的是为派生类提供一个通用接口[^2]。派生类必须实现所有纯虚函数才能成为具体类并实例化。 ```cpp class AbstractClass { public: virtual void func() = 0; // 纯虚函数 }; class ConcreteClass : public AbstractClass { public: void func() override { std::cout << "Concrete implementation" << std::endl; } }; ``` #### 纯虚函数抽象类的关系 纯虚函数抽象类的核心特性之一。通过定义纯虚函数抽象类强制派生类实现特定功能,从而确保所有派生类都遵循共同的接口规范[^3]。这种机制有助于提高代码的可扩展性可维护性[^4]。 --- ### 纯虚函数抽象类的区别 #### 定义上的区别 - **纯虚函数**:是一个没有具体实现的虚函数,必须由派生类实现。 - **抽象类**:是一个包含至少一个纯虚函数的类,不能直接实例化。 #### 功能上的区别 - **纯虚函数**:用于定义接口,要求派生类必须提供具体的实现。 - **抽象类**:作为基类存在,主要用于定义一组通用的行为规范,而不关心具体实现细节。 #### 使用场景的区别 - **纯虚函数**:适用于需要强制派生类实现某种功能的场景。 - **抽象类**:适用于需要定义一组通用接口,且不允许直接实例化的场景。 --- ### 示例代码 以下代码展示了纯虚函数抽象类的使用方式: ```cpp #include <iostream> using namespace std; // 抽象类 class AbstractClass { public: virtual void pureVirtualFunction() = 0; // 纯虚函数 virtual ~AbstractClass() {} // 虚析构函数 }; // 具体类 class ConcreteClass : public AbstractClass { public: void pureVirtualFunction() override { cout << "Implementation of pure virtual function" << endl; } }; int main() { // AbstractClass obj; // 错误:无法实例化抽象类 ConcreteClass obj; obj.pureVirtualFunction(); // 输出: Implementation of pure virtual function return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值