2015-05-20 115 views
1

如果我有一個純虛函數的類,那麼所有函數都必須是純虛函數嗎?C++純虛函數

#pragma once 

class Shape { 
    private: 
     static int countShape; 
    public: 
     virtual float perimeter() const=0; 
     virtual float area() const=0; 
     virtual void print(); 
     virtual void input(); 
     void setCountShape(); 
     int getCountShape()const{return countShape;}; 
     Shape(void); 
     ~Shape(void); 
}; 

我試着運行了一個程序,它寫入messege:

Error 3 error LNK2001: unresolved external symbol "public: virtual void __thiscall Shape::input(void)" ([email protected]@@UAEXXZ) 
Error 1 error LNK2001: unresolved external symbol "public: virtual void __thiscall Shape::print(void)" ([email protected]@@UAEXXZ) 
+1

不,但如果它不是純虛擬的,你需要爲它提供一個定義。 –

+0

可能重複[什麼是未定義的引用/未解析的外部符號錯誤,以及如何解決它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) – dwcanillas

+0

你應該閱讀這個錯誤,你會認識到:純虛函數沒有問題。 –

回答

0

需要,除非你將其標記爲純虛,以實現虛擬功能。

如果一個類包含一個更多的純虛函數,那麼它是抽象的;它不能被實例化。

1

回答你問的具體問題:不。因爲你有一個純虛函數,這並不意味着任何其他函數也必須是純虛函數。該類可以具有任意數量的純虛擬「常規」虛擬,非虛擬和靜態成員函數。

雖然正如其他人指出的那樣,但您得到的錯誤與虛擬函數無關。