【问题标题】:Abstract base class definition抽象基类定义
【发布时间】:2015-01-31 22:56:08
【问题描述】:

这可以是抽象基类的定义吗:“仅包含纯虚方法,并且通常用作派生类的接口规范”

或者抽象基类也可以包含其他方法(也是虚拟的)

【问题讨论】:

  • “包含至少一种纯虚方法”会是更好的定义。
  • 一个类是抽象的,如果它包含至少一个纯虚方法。它可以包含其他方法 - 纯虚拟、虚拟和/或非虚拟。
  • 纯虚拟类(没有其他方法或数据成员)通常称为接口。抽象类是也可以具有常规功能的接口。由于纯虚函数,这两种类型都无法实例化。

标签: c++


【解决方案1】:

根据 C++ 标准的定义(第 10.4 节,抽象类,强调我的):

抽象类是一个只能用作其他类的基类的类;没有抽象对象 类可以被创建,除了作为从它派生的类的子对象。一个类是抽象的,如果它有 至少 一个 纯虚函数[注:这样的功能可能会被继承:见下文。 ——尾注]

class point { / ... / };
class shape { // abstract class
    point center;
public:
    point where() { return center; }
    void move(point p) { center=p; draw(); }
    virtual void rotate(int) = 0; // pure virtual
    virtual void draw() = 0; // pure virtual
};

在示例中,shape 包含两个纯虚方法(使其成为抽象类),但也包含两个非虚方法。那没问题。因此,抽象类包含 only 纯虚函数的原始定义过于狭窄。只要拥有至少一个这样的就足够了。

【讨论】:

  • 谢谢你……我在某处读到了定义,真的很困惑……!!
  • @KaushikReddy 有一些这样的定义:它们源于那些更多地考虑编程而不是自己动手的人。对于一个抽象思维的学者来说,一个抽象类并不是真正抽象的,除非它没有非抽象部分(我应该知道,我是一个学者...... ;-))但是如果你问 C++ 的定义,语言标准是规范的。
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2017-02-11
  • 2018-07-26
相关资源
最近更新 更多