Правильный синтаксис файла заголовка - PullRequest
0 голосов
/ 30 декабря 2011

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

Например, допустим, у меня есть следующий класс:

class parent{
public:
    virtual void foo()= 0;
}

Допустим, у меня есть дочерний класс, который наследует от родительского. Должен ли я также объявить foo в файле заголовка дочернего элемента или я могу просто определить метод в исходном файле для дочернего элемента?

Будет ли приведен следующий текстбыть неверным?

Заголовочный файл:

class child : public parent{
}

Файл класса:

child::foo(){
// do something
}

Ответы [ 3 ]

1 голос
/ 30 декабря 2011

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

если вы снова объявляете метод из базового класса в производном классе, тогда он объявляет новый метод в производном классе, который скрывает все методы базового класса с тем же именем. Это называется Скрытие функции .

Хорошо прочитано:

В чем смысл, Предупреждение: Derived :: f (char) скрывает Base :: f (double)?

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

0 голосов
/ 30 декабря 2011

Вам не нужно объявлять foo() в определении дочернего класса или его заголовке.Наследуется автоматически - вот что значит наследование.(Конечно, функция должна быть public, а не private в базовом классе (parent), но это незначительный peccadillo.)

Вы просто определяете метод в исходном файледля детского класса.

0 голосов
/ 30 декабря 2011

Заголовочный файл:

class Class : public Parent {

public:
    void myMethod();
}

Исходный файл:

void Class::myMethod(){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...