gpt4 book ai didi

c++ - 为什么当派生类调用基类的纯虚函数时 g++ 不报错?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:09 26 4
gpt4 key购买 nike

我有一个带有纯虚函数 f() 的类 Base。另一个类 Derived 派生自 Base。我从 Derived 中调用 f()。使用 g++,我从链接器中得到一个错误。

[agnel@dooku tmp]$ g++ pure_virtual_function_call.cpp 
/tmp/ccGQLHi4.o: In function `Derived::f()':
pure_virtual_function_call.cpp:(.text._ZN7Derived1fEv[_ZN7Derived1fEv]+0x14): undefined reference to `VirtualBase::f()'
collect2: error: ld returned 1 exit status

在我看来,错误是由链接器捕获的。为什么编译器没有报告这个错误?为什么将它留给链接器?

代码如下:

#include <iostream>

using namespace std;

class VirtualBase {
public:
virtual void f() = 0;
};

class Derived : public VirtualBase {
public:
void f(){
VirtualBase::f();
cout << "Derived\n" ;
}
};


int main(){
Derived d;
d.f();
return 0;
}

最佳答案

因为纯虚函数可以有定义,如果有定义,您可以使用语法 VirtualBase::f() 非虚拟地调用它们。

编译器无法判断您是否打算定义该函数,因此只能由链接器检测到错误。

关于c++ - 为什么当派生类调用基类的纯虚函数时 g++ 不报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com