gpt4 book ai didi

c++ - 抽象基类调用父类的纯虚函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:47 24 4
gpt4 key购买 nike

<分区>

今天一位同事问我关于看起来有点像这样的代码:

#include <iostream>

template <class T>
class IBase {
public:
virtual ~IBase() {}

public:
virtual void foo() = 0;
};

template <class T>
class Base : public IBase<T> {
public:
virtual void bar() {
foo(); // compiler error
}
};

class Derived : public Base<int> {
public:
virtual void foo() {
std::cout << "Hello World!\n";
}
};

int main() {
Derived d;
d.bar();
}

一开始他收到一个编译器错误,提示未找到“foo()”。好的,所以他尝试将其更改为 IBase<T>::foo(); .编译时,它会导致链接器错误。所以立即,我想起我以前见过这种类型的问题,并建议他写 this->foo();反而。中提琴!问题解决了!

然后他问我为什么不简单foo();工作不是 this->x();x(); 基本相同 ?老实说,我不知道,但他激起了我的兴趣。所以我们在这里:

总结:

virtual void bar() {
this->foo(); // works
//IBase<T>::foo(); // linker error
//foo(); // compiler error
}

问题是为什么是this->必需的。为什么其他选项不起作用?

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