2014-10-22 2 views
3

Каков эффект предоставления реализации для метода, объявленного как чистый виртуальный. Не делает ли он базовый класс не абстрактным? Должен ли класс Derived предоставлять реализацию?Предоставление реализации для чистого виртуального метода в абстрактном классе

class Base 
{ 
public: 
    Base(); 
    ~Base(); 

    virtual void abstractMethod() = 0; 

private: 
    uint32_t data; 
}; 

class Derived : public Base 
{ 
public: 
    Derived(); 
    ~Derived(); 
}; 

void Base::abstractMethod() { data = 1; } 

ответ

4

Реализация чистой виртуальной функции не изменяет правила. Функция по-прежнему чиста, класс по-прежнему является абстрактным, и производный класс должен по-прежнему переопределять его с нечистой функцией, которая должна быть реализована.

Если чистая функция имеет реализацию, то это можно назвать, не виртуально:

object.Base::abstractMethod(); 

Это может быть полезно, если есть общая реализация (или частичное осуществление), что некоторые производные классы могли бы хотеть использовать ; они могут просто реализовать свое переопределение для вызова этой реализации.

Смежные вопросы