嵌入式_晚风 2024-08-03 17:45 采纳率: 100%
浏览 7
已结题

类继承、纯虚函数写法问题

C类、B类继承A类,A类有纯虚函数是抽象类,C类、B类不是抽象类,C类、B类如何对A类中的纯虚函数进行声明?下面哪种写法正确?还是都正确?两种写法我都见过,有什么区别呢
第一种写法:


class A {
public:
    virtual void pureVirtualFunction() = 0; // 纯虚函数
};

class B : public A {
public:
    void pureVirtualFunction() override; // 声明并重写纯虚函数
};

class C : public A {
public:
    void pureVirtualFunction() override; // 声明并重写纯虚函数
};

第二种写法:


class A {
public:
    virtual void pureVirtualFunction() = 0; // 纯虚函数
};

class B : public A {
public:
    virtual  void pureVirtualFunction() override; // 声明并重写纯虚函数
};

class C : public A {
public:
     virtual void pureVirtualFunction() override; // 声明并重写纯虚函数
};
  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-08-03 17:45
    关注

    引自免费微信小程序:皆我百晓生

    首先,我要明确的是,无论是第一种写法还是第二种写法,都是正确的。在C++中,对于继承自抽象类(含有纯虚函数的类)的非抽象子类,在子类中对父类的纯虚函数进行声明和重写时,是否加上virtual关键字都是可以的。

    两种写法的主要区别在于语义的清晰度。在第二种写法中,每个重写纯虚函数的子类都显式地使用了virtual关键字,这明确地表明这个函数是一个虚函数,即使它是重写父类的纯虚函数。这种写法在大型项目中可能有助于提高代码的可读性和可维护性。

    而在第一种写法中,对于子类的函数声明,没有显式地使用virtual关键字。根据C++的继承规则,如果子类中没有使用override关键字,即使没有写virtual关键字,实际上也是在重写父类的虚函数。这种情况下,虽然没有明确标注是虚函数,但是编译器会隐式地将其视为虚函数。因此,从功能的角度看,两种写法是等价的。

    对于你的代码示例,两种写法都是正确的。在实际编程中,你可以根据自己的编码风格和团队的规定来选择使用哪种写法。不过,为了代码的清晰和易于理解,我建议你在重写虚函数时始终显式地使用virtual关键字。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月3日

悬赏问题

  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL