gpt4 book ai didi

c++ - 继承重载函数 : Requires namespace?

转载 作者:行者123 更新时间:2023-11-28 00:39:21 26 4
gpt4 key购买 nike

如果我在基类中有一个重载函数,为什么我需要为我没有重新实现的所有重载拷贝声明基类的命名空间(假设我至少重新实现了一个)。例如考虑以下代码:

#include <iostream>


class Base {
protected:
int bar;

public:
Base() : bar(0) {}
virtual void Bar(int b) { bar = b; }
virtual int Bar() { return bar; }
};

class Foo : public Base {
protected:
int extraBar;

public:
//virtual void Bar(int b) { extraBar = b; } //Uncomment
};

int main() {

Foo T;

std::cout << T.Base::Bar() << std::endl;
std::cout << T.Bar() << std::endl; //will cause code to not compile

return 0;
}

有没有简单的解决方法?我必须手动修改几行代码,因为我有

 func()
func(var)
func(var, var, var)

和 var 永远不是一回事,所以在 func(var) 上查找和替换不会很好地工作。

最佳答案

你可以简单地这样做

using Base::Bar;

Foo 类中。编译器将找不到没有参数的 Bar,没有 using,因为它被 Foo::Bar 函数隐藏。

A name can be hidden by an explicit declaration of that same name in a nested declarative region or derivedclass

关于c++ - 继承重载函数 : Requires namespace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19628309/

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