Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在类中使用mean?_C++_Language Features_Using - Fatal编程技术网

C++ C++;在类中使用mean?

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

在类定义中使用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 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;
您可以将基类函数带回到作用域中,从而启用重载解析,正如您最初预期的那样