gpt4 book ai didi

c++ - 重载父类(super class)的函数

转载 作者:可可西里 更新时间:2023-11-01 16:29:26 28 4
gpt4 key购买 nike

C++ 标准中有什么东西阻止我重载父类(super class)的函数吗?

从这对类开始:

class A {            // super class
int x;

public:
void foo (int y) {x = y;} // original definition
};

class B : public A { // derived class
int x2;

public:
void foo (int y, int z) {x2 = y + z;} // overloaded
};

我可以轻松调用 B::foo():

    B b;
b.foo (1, 2); // [1]

但是如果我尝试调用 A::foo() ...

    B b;
b.foo (12); // [2]

...我收到一个编译器错误:

test.cpp: In function 'void bar()':
test.cpp:18: error: no matching function for call to 'B::foo(int)'
test.cpp:12: note: candidates are: void B::foo(int, int)

为了确保我没有遗漏任何东西,我更改了 B 函数的名称,这样就没有过载:

class B : public A {
int x2;

public:
void stuff (int y, int z) {x2 = y + z;} // unique name
};

现在我可以使用第二个示例调用 A::foo()

这是标准吗?我正在使用 g++。

最佳答案

您需要在类 B 的定义中使用 using 声明:

class B : public A {
public:
using A::foo; // allow A::foo to be found
void foo(int, int);
// etc.
};

如果没有 using 声明,编译器会在名称查找期间找到 B::foo,并且实际上不会在基类中搜索具有相同名称的其他实体,因此 A::foo 未找到。

关于c++ - 重载父类(super class)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597032/

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