簡體   English   中英

C ++在一個類中使用了什么意思?

[英]What does C++ using mean inside a class?

在類定義中使用是什么意思?

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聲明取消隱藏父類的成員聲明。 這有時是必要的,如果在另一成員聲明derived可以隱藏從構件base

如果anotherClass是包含類似成員函數的基類

virtual void f();

並且您決定在派生類中重載函數,例如

virtual void f(int);

它“隱藏”基類中的f()。 例如,通過指向派生類的指針調用f()會導致錯誤,因為編譯器不會“看到”f()的版本不再從基類中獲取參數。

通過寫作

using Base::f;

您可以將基類函數帶回范圍,從而實現重載解析,因為您可能希望它首先工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM