Почему нам нужно скопировать и вставить объявление функции в унаследованный заголовок класса - PullRequest
3 голосов
/ 26 февраля 2012

Это для C ++.

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

//< A.hpp
class A
{
public:
   virtual funcA();
   virtual funcB();
}

И мы хотим, чтобы класс наследовал от A и переопределял его функции.

//< childA.hpp
class childA
{
   virtual funcA();
   virtual funcB();
}

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

Я помню, у нас нет этой проблемы с Object-C, не так ли?

Ответы [ 2 ]

5 голосов
/ 26 февраля 2012

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

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

1 голос
/ 26 февраля 2012

Из статьи Objective-C в Википедии:

Objective-C, как и Smalltalk, может использовать динамическую типизацию: объекту может быть отправлено сообщение, которое не указано в его интерфейсе.

http://en.wikipedia.org/wiki/Type_system#Dynamic_typing

C ++, с другой стороны, статически типизирован .Это более строгое ограничение во время компиляции.

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