为什么继承不能在方法内部工作?



无法编译:

struct Base
{
void something( int a ) { }
};
struct Derived : public Base
{
static void something()
{
std::unique_ptr<Derived> pointer = std::make_unique<Derived>();
pointer->something( 11 );
}
};

有可能修复using Base::something,但仍然有可能使继承工作,即使在方法内部?

通过对派生类中的函数使用相同的名称,可以隐藏来自基类的符号

您可以通过使用using语句从基类中拉入名称来解决这个问题:

struct Derived : public Base
{
// Also use the symbol something from the Base class
using Base::something;
static void something()
{
std::unique_ptr<Derived> pointer = std::make_unique<Derived>();
pointer->something( 11 );
}
};

我不太确定你想要完成什么。我增加了virtual,并更改了派生something类函数的名称,并加入了两个变体。一个变体通过虚继承调用,另一个变体直接调用基类成员函数。

#include <iostream>
using std::cout;
namespace {
struct Base {
virtual ~Base();
virtual void something(int a) { std::cout << "Base a:" << a << "n"; }
};
Base::~Base() = default;
struct Derived : Base {
void something(int b) override { std::cout << "Derived b:" << b << "n"; }
static void action() {
std::unique_ptr<Derived> pointer = std::make_unique<Derived>();
pointer->something(11);
}
static void other_action() {
std::unique_ptr<Derived> pointer = std::make_unique<Derived>();
pointer->Base::something(11);
}
};
} // anon
int main() {
Derived::action();
Derived::other_action();
}

最新更新