2012-07-17 41 views
0

我有一個關於純抽象基類的問題。假設我有一個帶有一些函數和變量的抽象純基類。如果我從基礎創建2個派生類,那麼派生類是否都有自己的一組變量?派生類需要重新定義哪些變量有純粹的抽象基類?

例如:

#include <iostream> 
using namespace std; 

class base 
{ 
public: 
virtual void display() = 0; 
protected: 
static input; 
static output; 
} 

class Derived1:public base 
{ 
public: 
virtual void display(); 
void readInput(); 
} 

class Derived2:public base 
{ 
public: 
virtual void display(); 
void readInput(); 
} 
class Derived1:public base 
{ 
virtual void display(); 
} 
int main() 
{ 
Derived1 obj1; 
Derived2 obj2; 

return 0; 
} 

所以在這裏OBJ1和OBJ2,得到2個變量 「輸入」 和 「輸出」 分別?或者只有一組?

+2

您可以輕鬆測試。 – 2012-07-17 10:04:03

+0

[靜態成員是否被繼承? (C++)](http://stackoverflow.com/questions/998247/are-static-members-inherited-c) – jogojapan 2012-07-17 10:19:33

回答

2

雖然你可以很容易地進行測試,這裏有一個提示:考慮你如何定義成員:

int base::input; 

現在想想,只有一個base類,並static結合的類。

4

他們將只有一組靜態變量的所有派生類。這很容易測試:

class Base 
{ 
public: 
    static int k; 
}; 
int Base::k; 

class Derived1: public Base 
{ 

}; 
class Derived2: public Base 
{ 

}; 

int main(){ 
    Derived1::k = 5; 
    Derived2::k = 10; 

    std::cout << Derived1::k << " " << Derived2::k; 
} 

輸出:10 10

的原因是,所有靜態的東西應用到基類單獨(注意,他們必然要的類,而不是一個對象,所以它也與創建的每個類的對象數量無關)。既然你只有一個基類,那麼你將擁有多少派生的基本類並不重要,這些變量的集合仍然會綁定到那個單一的基類。

0

有兩組變量;一個用於obj 1,另一個用於obj 2

+1

請注意'靜態'。 – BoBTFish 2012-07-17 10:08:46

0

static變量在類實例(包括派生類實例)之間共享。

+0

Base是純粹的抽象類,它不能被實例化,所以意味着我們不能從基類中起訴這些變量。 也是一個純粹的抽象類,如果它的任何方法是純虛擬的..我們可以有一些基礎類的方法純虛擬和少數與基類實現的方法嗎? – Fancier 2012-07-17 10:42:36

+0

@Fancier當然你可以在抽象類中實現方法。嘗試一下。 – log0 2012-07-17 13:45:37

相關問題