你引用的鏈接是namespace
的,則應該是指它規定了class
using-declaration:
如果派生類已經有相同的名稱,參數列表的成員,資格,派生類成員隱藏或覆蓋(不衝突)從基類引入的成員。
:
在您發佈的代碼的情況下,在void fun()
是Base
通過void fun()
在Derived
當你調用fun
,例如隱藏,所以沒有,他們不是都「看得見」,除非你是明確
class Base {
public:
void fun() { std::cout << "base" << std::endl; }
};
class Derived : public Base {
public:
using Base::fun;
void fun() { std::cout << "derived" << std::endl; }
};
Derived d;
d.fun(); // name lookup calls Derived::fun
d.Base::fun(); // explicitly call Base::fun
此外,由於您公開從Base
公開派生,嚴格來說,您不需要聲明using
;您的實例將是void fun()
在Base
爲protected
或者你private
/protected
「從Base
,例如LY繼承:
#include <iostream>
class Base {
public:
void fun() { std::cout << "base" << std::endl; }
protected:
void fun2() { std::cout << "base2" << std::endl; }
};
// class default is private
class Private : Base {
public:
// fun() won't be accessible since private inheritance and no using
// fun2 can now be accessed directly
using Base::fun2;
};
class Public : public Base {
public:
// fun is already public
using Base::fun2; // bring into scope
};
class Derived : public Base {
public:
using Base::fun;
using Base::fun2;
// overriden method fun, no conflict, choose this method if type is Derived
void fun() { std::cout << "derived" << std::endl; }
};
int main(int argc, char* argv[])
{
Private p;
Public u;
Derived d;
// generates a compiler error since Base is privately inherited
//p.fun();
p.fun2(); // OK, output: base2
u.fun(); // OK, output: base
u.fun2(); // OK, output: base2
// use Derived::fun since override
d.fun(); // OK, output: derived
d.Base::fun(); // OK, output: base
d.fun2(); // OK, output: base2
return 0;
}
希望可以幫助
一個更直接的聯繫將是http:// EN。 cppreference.com/w/cpp/language/using_declaration – Cubbi