在类定义中使用是什么意思?
class myClass {
public:
[...]
using anotherClass::method;
};
答案 0 :(得分:17)
该声明取消隐藏基类成员。这通常用于允许成员函数的重载。例如:
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;
};
答案 1 :(得分:6)
我见过的情况:
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;
}
答案 2 :(得分:4)
大多数情况下,像这样使用的语法如下:
class derived : public base {
public:
[...]
using base::method;
};
此处的using
声明取消隐藏来自父类的成员声明。如果derived
中的其他成员声明可能会隐藏base
中的成员,则有时需要这样做。
答案 3 :(得分:0)
如果anotherClass是包含
之类的成员函数的基类virtual void f();
并且您决定重载派生类中的函数,如
virtual void f(int);
它“隐藏”基类中的f()。例如,通过指向派生类的指针调用f()会导致错误,因为编译器不会“看到”f()的版本不再从基类中获取参数。
写作
using Base::f;
您可以将基类功能带回范围,从而实现重载解析,因为您可能希望它首先工作。