2015-05-20 2 views
1

Если у меня есть класс с одной чистой виртуальной функцией, все ли функции должны быть чистыми виртуальными?C++ pure virtual function

#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

Чтобы ответить на конкретный вопрос, который вы задали: Нет. Просто потому, что у вас есть одна чистая виртуальная функция, это не означает, что любые другие функции также должны быть чисто виртуальными. Класс может иметь любое количество виртуальных, «обычных» виртуальных, не виртуальных и статических функций-членов.

Хотя, как указывали другие, ошибка, которую вы получаете, не имеет ничего общего с тем, что функция является виртуальной.