C++ C++;在类中使用mean?
在类定义中使用using意味着什么C++ C++;在类中使用mean?,c++,language-features,using,C++,Language Features,Using,在类定义中使用using意味着什么 class myClass { public: [...] using anotherClass::method; }; 该声明取消隐藏基类成员。这通常用于允许成员函数重载。例如: class Base { public: void method() const; }; class Derived : public Base { public: void method(int n) const; // Without the us
class myClass {
public:
[...]
using anotherClass::method;
};
该声明取消隐藏基类成员。这通常用于允许成员函数重载。例如:
class Base {
public:
void method() const;
};
class Derived : public Base {
public:
void method(int n) const;
// Without the using, you would get compile errors on d.method();
using Base::method;
};
我看到的情况是:
class A
{
void foo(int);
void foo(float);
}
class B : public A
{
void foo(string);
}
B b;
b.foo(12); // won't work!
因为我在B中使用不同的签名实现了一个新的foo函数,所以它对a隐藏了foo函数。为了覆盖此行为,我将执行以下操作:
class B : public A
{
void foo(string);
using A::foo;
}
大多数情况下,这样的语法是这样使用的:
class derived : public base {
public:
[...]
using base::method;
};
此处的
using
声明从父类中取消隐藏成员声明。如果另一个类是包含类似于
virtual void f();
然后决定在派生类中重载函数,如
virtual void f(int);
它在基类中“隐藏”f()。例如,通过指向派生类的指针调用f()将导致错误,因为编译器不再“看到”不再从基类获取参数的f()版本
通过写作
using Base::f;
您可以将基类函数带回到作用域中,从而启用重载解析,正如您最初预期的那样