2010-06-14 1 views
3

При создании прототипа классов я выложу деструктор как таковой:C++ Виртуальные деструкторы

virtual ~MyClass(); 

Когда завершает класс в библиотеке я заметил, что я не могу добавить «виртуальный». Является ли это нормальным, и он принимается во внимание или я делаю что-то неправильно?

Например, когда я пытаюсь сделать это я получаю ошибку компиляции:

virtual MyClass::~MyClass() { } 

Вместо делать это работает:

MyClass::~MyClass() { } 

Мой вопрос, так как я не должен включать virtual в окончательной коде записи деструктора деструктор все еще ведет себя как виртуальный деструктор (поскольку он является виртуальным как прототип)?

+1

Yay для C++ вопрос номер 0x8000 :) – fredoverflow

+2

@Fred: Я думаю, что люди теперь задают вопросы о C++ _a bit more_, чем раньше? ;-) –

+0

@James: LOL, отличный каламбур :) – fredoverflow

ответ

15

Ключевое слово virtual используется только как часть объявления функции-члена внутри определения класса.

Если функция-член определена вне определения класса, то ключевое слово virtual не размещено там.

+0

Это ответ на мой вопрос очень красиво :) – 2010-06-14 16:18:31

+0

Тогда отметьте его как ответ. – Puppy

+0

@DeadMG вам нужно подождать 15 минут, прежде чем пометить ответ. – 2010-06-14 16:31:30

4

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