The using declaration and class members (C++ only)
A using declaration in a definition of
a class A allows you to introduce a name of
a data member or member function from a base class of A into
the scope of A.
You would need a using declaration in
a class definition if you want to create a set of member functions
from base and derived classes, or you want to change the access of
a class member.
A
using declaration in a class A may
name one of the following options: - A member of a base class of
A - A member of an anonymous union that is a member of a base class
of
A - An enumerator for an enumeration type that is a member of a base
class of
A
struct Z {
int g();
};
struct A {
void f();
enum E { e };
union { int u; };
};
struct B : A {
using A::f;
using A::e;
using A::u;
// using Z::g;
};The compiler would not allow the using declaration using
Z::g because Z is not a base class of A.A
using declaration cannot name a template.
For example, the compiler will not allow the following: struct A {
template<class T> void f(T);
};
struct B : A {
using A::f<int>;
};Every instance of the name mentioned in a
using declaration
must be accessible. The following example demonstrates this: struct A {
private:
void f(int);
public:
int f();
protected:
void g();
};
struct B : A {
// using A::f;
using A::g;
};The compiler would not allow the using declaration using
A::f because void A::f(int) is not accessible
from B even though int A::f() is
accessible.