[英]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.