2015-01-31 133 views
6

可这是一个抽象基类的定义:“只包含纯虚拟方法并且经常用作接口规范派生类”抽象基类定义

,或者可以抽象基类还包含其它的方法(还虚拟)

+0

“包含至少一个纯虚拟方法”将是一个更好的定义。 – juanchopanza 2015-01-31 22:58:23

+0

如果类至少包含一个纯虚拟方法,则该类是抽象的。它可以包含其他方法 - 纯虚拟,​​虚拟和/或非虚拟。 – 2015-01-31 22:58:49

+0

只有纯虚拟类(没有其他方法或数据成员)的类通常称为接口。抽象类也是一个可以具有常规功能的接口。由于纯虚函数,两种类型都不能实例化。 – 2015-01-31 23:00:28

回答

4

通过从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包含两个纯虚拟方法(这使得它一个抽象类),但也包含两个非虚拟方法。那没问题。所以你的原始定义是抽象类包含只有纯虚函数过于狭隘。至少有一个这样的就足够了。

+0

谢谢你......我在某处阅读了这个定义,感到非常困惑。 – 2015-01-31 23:04:10

+0

@KaushikReddy这里有一些像这样的定义:它们起源于更多关于编程的人,而不是自己做的事。对于抽象思维的学术来说,抽象类不是真正抽象的,除非没有非抽象的部分(我应该知道,我是一个学者...... ;-))但是如果你问到C++的定义,语言标准是规范性的。 – cmaster 2015-01-31 23:39:37