抽象基类定义

6
这可以是抽象基类的定义:包含仅纯虚方法,通常作为派生类的接口规范。抽象基类还可以包含其他方法(也是虚方法)。

1
“至少包含一个纯虚方法”将是更好的定义。 - juanchopanza
一个类如果至少包含一个纯虚拟方法,则被视为抽象类。它可以包含其他方法 - 纯虚拟、虚拟和/或非虚拟方法。 - Igor Tandetnik
只有纯虚函数(没有其他方法或数据成员)的类通常被称为接口。抽象类是一个可以拥有常规函数的接口。由于存在纯虚函数,这两种类型都无法实例化。 - James Moore
1个回答

5

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

An abstract class is a class that can be used only as a base class of some other class; no objects of an abstract class can be created except as subobjects of a class derived from it. A class is abstract if it has at least one pure virtual function. [ Note: Such a function might be inherited: see below. —end note ]

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 包含了两个纯虚方法(因此它是一个抽象类),但也包含了两个非虚方法。这没有问题。因此,你最初的定义,即抽象类只包含纯虚函数,太过严格。只要至少有一个纯虚函数就足够了。

谢谢你...我在某个地方读到了这个定义,然后就感到非常困惑了..!! - Kaushik Reddy
@KaushikReddy 有一些定义是这样的:它们起源于那些更多地考虑编程而非自己实践的人。对于一个抽象思维的学者来说,除非其中没有任何非抽象部分,否则抽象类并不真正是抽象的(我知道这一点,因为我是一名学者...;-))但如果你询问关于C++的问题,语言标准的定义是规范性的。 - cmaster - reinstate monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接