你可以在类中声明许多你喜欢的函数,但是当我没有使用和未定义时,我得到的唯一警告就是一点绿色的波形。我理解这一点。
我不明白的是,如果我将未使用的功能设为虚拟,那么我必须定义该功能,即使我没有调用它。但是,这只有在我实例化该类时。所以在下面:
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.
}
一旦我添加了虚拟关键字,我的类就会增长到8个字节(vtable指针)。前往vtable指针指向的任何地方我想象我到达vtable,它具有执行特定于对象的函数所需的指令,在运行时识别,但我不能看到对此函数定义的需要完全在vtable。对不起,如果这是一个显而易见的问题。
另外,我在Visual Studio上。
编辑:这是一些可编辑的代码:
struct Animal
{
void unusedFunc();
virtual void unusedVirtualFunc();
};
int main()
{
Animal dog1;
}