有几个前提条件:
1.被引用的变量所在类必须被完整地定义,而不是只有前向声明(例如只是一行class A;);
2.被引用的变量必须是引用处可访问的。也就是说,以下条件至少满足其中之一:
2.1.访问变量的语句所在的类被声明为被访问的变量所在类的友元类;
2.2.访问变量的语句所在的函数被声明为被访问变量所在类的友元函数;
2.3.被访问变量被public修饰,且访问变量的语句所在的类不是被访问变量所在的类的private继承派生类;
2.4.被访问变量被protected修饰,且访问变量的语句所在的类是被访问变量所在的类的public继承派生类;
2.5.访问变量的语句所在的类定义在被访问变量所在的类的内部。
现在假设满足以上前提条件的B类的某个成员函数或成员初始化的语句要引用A类的成员m,那么
1.当m是A类的静态成员时,可以通过A::m引用;
2.当m是A类的非静态成员,且对象a是类A的实例时,可以通过a.m引用。
class A
{
private:
int a;
public:
int get()
{
return a;
}
}
class B
{
public:
A a = new A();
a.get();
}