Vin*_*nce 1 c++ virtual hyperlink vtable
我有一个声明如下的类:
class TestFoo {
public:
TestFoo();
virtual void virtualFunction();
void nonVirtualFunction();
};
Run Code Online (Sandbox Code Playgroud)
我尝试以这种方式实现
TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
Run Code Online (Sandbox Code Playgroud)
在编译时返回错误:
undefined reference to vtable for TestFoo
Run Code Online (Sandbox Code Playgroud)
我试过了 :
TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
void TestFoo::virtualFunction(){}
Run Code Online (Sandbox Code Playgroud)
编译确定与这些帖子的答案一致:
令我困惑的是,我认为声明虚函数的重点在于我不需要定义它.在这个例子中,我不打算创建任何TestFoo实例,而是创建从TestFoo继承的(具体)类的实例.但是,我仍然想为TestFoo的每个子类定义函数nonVirtualFunction.
我不对劲的东西?
谢谢 !
声明虚函数的重点在于我不需要定义它
不完全是,它说"我可能想用派生类中的其他东西替换这个函数的实现."
我可能误解了你的问题,但你似乎暗示你不认为你可以在C++中定义纯虚拟成员函数,你可以.您可以按如下方式声明一个.
virtual void virtualFunction() = 0;
Run Code Online (Sandbox Code Playgroud)
通常,不会定义纯虚函数,但当然可以.这说"这个函数没有默认的实现,因为它并不总是有意义,但我会为你提供一个你可以选择的实现."
顺便说一句,如果一个类有任何虚函数,你还应该定义一个虚析构函数,因为它是完全合法的(并且经常被推荐)有一个指向派生类的基类(智能)指针 - 没有虚拟析构函数,对象可能不delete正确.