gpt4 book ai didi

c++ - 如何用抽象类调用抽象函数

转载 作者:行者123 更新时间:2023-11-30 03:40:25 26 4
gpt4 key购买 nike

我想在调用抽象(虚拟)函数的抽象类中定义一个函数。但是当我从抽象类继承时,这个函数没有被继承:

class A {
public:
virtual void f(int t) = 0;

void f() {
f(0);
}
};

class B : public A {
public:
void f(int t) override { }

// using A::f; // uncomment to fix the problem
};

int main() {
B b;
b.f(0); // works
b.f(); // error: no matching function for call to ‘B::f()’
}

为什么这行不通?解决方法是使用 using A::f,但为什么 A::f() 没有被继承?

最佳答案

它不起作用,因为 B 没有 f(),只有 f(int)

如果 B 没有任何名为 f 的函数,那么将在父类(super class)中搜索匹配的函数,并进行重载解析。但是因为子类 B 确实已经有一个名为 f 的函数,所以不会搜索父类(super class),重载解析发生在 B 中。

这就是 using 关键字的作用,使父类(super class)的 f() 成为 B 命名空间的一部分。这里的答案是,真的,“那是因为这就是 C++ 的工作方式”。

关于c++ - 如何用抽象类调用抽象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032713/

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