2015-01-31 136 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