C++ C++;继承重载具有不同参数的函数
我正在做一个使用类继承的项目,需要在基类和派生类中使用大量重载,我已经简化了代码,但我不想不必要地复制和粘贴,因为继承就是为了这个目的C++ C++;继承重载具有不同参数的函数,c++,polymorphism,overloading,using-declaration,name-hiding,C++,Polymorphism,Overloading,Using Declaration,Name Hiding,我正在做一个使用类继承的项目,需要在基类和派生类中使用大量重载,我已经简化了代码,但我不想不必要地复制和粘贴,因为继承就是为了这个目的 #include <iostream> class Base { public: Base() = default; //base const char* overload void foo(const char* message) { std::cout << message <
#include <iostream>
class Base
{
public:
Base() = default;
//base const char* overload
void foo(const char* message)
{
std::cout << message << std::endl;
}
//other overloads ...
};
class Derived : public Base
{
public:
Derived() = default;
//derived int overload
void foo(int number)
{
std::cout << number << std::endl;
}
};
int main()
{
Derived b;
b.foo(10); //derived overload works
b.foo("hi"); //causes error, acts as if not being inherited from Base class
return 0;
}
#包括
阶级基础
{
公众:
Base()=默认值;
//基本常量字符*重载
void foo(常量字符*消息)
{
std::cout您可以在派生类中使用using声明,如
using Base::foo;
使基类中声明的重载函数foo在派生类中可见
这是插入using声明的程序
#include <iostream>
class Base
{
public:
Base() = default;
//base const char* overload
void foo(const char* message)
{
std::cout << message << std::endl;
}
//other overloads ...
};
class Derived : public Base
{
public:
Derived() = default;
using Base::foo;
//derived int overload
void foo(int number)
{
std::cout << number << std::endl;
}
};
int main()
{
Derived b;
b.foo(10); //derived overload works
b.foo("hi"); //causes error, acts as if not being inherited from Base class
return 0;
}
您可以在派生类中使用using声明,如
using Base::foo;
使基类中声明的重载函数foo在派生类中可见
这是插入using声明的程序
#include <iostream>
class Base
{
public:
Base() = default;
//base const char* overload
void foo(const char* message)
{
std::cout << message << std::endl;
}
//other overloads ...
};
class Derived : public Base
{
public:
Derived() = default;
using Base::foo;
//derived int overload
void foo(int number)
{
std::cout << number << std::endl;
}
};
int main()
{
Derived b;
b.foo(10); //derived overload works
b.foo("hi"); //causes error, acts as if not being inherited from Base class
return 0;
}
将使用Base::foo;
添加到Derived
的主体中。否则,只有Derived::foo
重载可见。问题不是重载解析,而是名称查找。常见问题-不是Q或A的最清晰提炼,而是例如:/“为什么”此问题的版本:在派生的主体中添加使用Base::foo;
。否则,只有派生的::foo
重载可见。问题不是重载解析,而是名称查找。常见问题-不是Q或A的最清晰提炼,但例如:/“为什么”此问题的版本: