У вас может быть сколько угодно функций, объявленных в классе, и единственное предупреждение, которое я получаю, это небольшая зеленая волнистая линия, когда она не используется и не определена. Я это поняла.
Чего я не понимаю, так это того, что если я делаю неиспользуемую функцию виртуальной, то мне нужно определить функцию, даже если я ее не вызываю. Однако это только в том случае, если я создаю экземпляр класса. Итак, в следующем:
struct Animal
{
void unusedFunc(); // <--- Regardless of whether class is instantiated, this does not need to be defined unless it is called
virtual void unusedVirtualFunc(); // <--- Has to be defined whether or not it is called, but only if this class is instantiated.
};
int main()
{
Animal dog1; // <--- This line now means the virtual function has to be defined. Doesn't affect the non-virtual function at all.
}
Как только я добавляю ключевое слово virtual, размер моего класса увеличивается до 8 байт (указатель vtable). Путешествуя туда, куда указывает указатель vtable, я думаю, что приду к vtable, в которой есть инструкции, необходимые для выполнения функции, относящейся к объекту, идентифицированному во время выполнения, но я не вижу необходимости в том, чтобы это определение функции было в vtable вообще. Извините, если это очевидный вопрос.
Кроме того, я на Visual Studio.
Изменить: вот некоторый компилируемый код:
struct Animal
{
void unusedFunc();
virtual void unusedVirtualFunc();
};
int main()
{
Animal dog1;
}
unusedVirtualFunc
и завершающей точки с запятой в структуреAnimal
. - person PaulMcKenzie   schedule 22.12.2016