C++抽象类和接口类

C++中的接口和抽象类常常令人困惑。与Java或C#等其他编程语言不一样,C++中没有定义接口和抽象类的关键字。但是,也可以像其他语言一样,在C++中使用接口和抽象类。

首先,我们来比较接口和抽象类的概念。

  1. 接口没有实现任何的方法,只是进行方法的声明,继承接口的类来实现这些方法。
  2. 接口没有定义任何变量,尽管Java的接口中可以有变量的定义,但是变量也是会被finalstatic修饰。
  3. 实现接口的类必须实现接口的所有方法。
  4. 抽象类可以有变量声明和方法实现/声明。此外,可以继承抽象类而不实现抽象方法。
  5. 抽象类不能实例化,而是由另一个类继承。实例化和抽象类将导致编译错误。

在了解如何定义抽象类和接口之前,让我们先了解在C++中什么是虚方法和纯虚方法。

虚方法:需要在派生类中进行重新定义,使用virtual关键字告诉编译器对该方法执行动态链接或后期绑定。

纯虚方法:是一种不需要定义而只需要声明的虚方法,它是通过在方法最后添加=0进行声明。

C++中的抽象类

  1. 最少具有一个纯虚函数。
  2. 可以有实现的方法。
  3. 可以进行变量定义。
#include <string>
#include <iostream>
​
/*Declaring an abstract class*/
class AbstractClass{
    public:
        AbstractClass(std::string msg): message(msg){}
        virtual void method_first() = 0; // a pure virtual method
        virtual void method_second(){   // implemented virtual method
            std::cout << message << std::endl;
        }
​
    private:
        std::string message;    
}; 

C++中的接口

  1. 所有的函数必须被声明为纯虚函数。
  2. 没有变量的声明。
/*an interface declaration*/
class InterfaceClass{
    public:
        // declaring a pure virtual method by assigning 0
        virtual void method_first() = 0 ; 
        virtual void method_second() = 0;
};

 

什么时候使用接口

当实现的功能彼此不相关时,创建的每个对象都是独立的,我们使用接口。

什么时候使用抽象类

当试图创建一个功能的多个版本时,当创建的对象之间存在某种关系时,我们使用抽象类。

参考

Abstract class vs Interface in C++ | by Manish Sonal | Medium

c++中抽象类和接口mybright的博客-CSDN博客_c++接口和抽象类

接口-c++ - 知乎 (zhihu.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值