C ++在一个类中使用了什么意思?

时间:2011-03-05 16:33:44

标签: c++ language-features using

在类定义中使用是什么意思?

class myClass {
public:
  [...]
  using anotherClass::method;
};

4 个答案:

答案 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;

您可以将基类功能带回范围,从而实现重载解析,因为您可能希望它首先工作。