Inner类成员函数访问Outer类私有成员
- 友元关系:可以在
Outer
类中将Inner
类声明为友元类,这样Inner
类的成员函数就可以访问Outer
类的私有成员。例如:
class Outer {
private:
int privateMember;
public:
class Inner;
friend class Inner;
};
class Outer::Inner {
public:
void accessOuterPrivate(Outer& outer) {
outer.privateMember = 42; // 可以访问Outer类的私有成员
}
};
- 通过Outer类的公有接口间接访问:
Inner
类成员函数可以通过调用Outer
类的公有成员函数来间接访问Outer
类的私有成员。例如:
class Outer {
private:
int privateMember;
public:
void setPrivateMember(int value) {
privateMember = value;
}
int getPrivateMember() {
return privateMember;
}
class Inner;
};
class Outer::Inner {
public:
void accessOuterPrivate(Outer& outer) {
outer.setPrivateMember(42); // 通过公有接口间接访问私有成员
int value = outer.getPrivateMember();
}
};
Inner类对象的作用域界定场景
- 在Outer类成员函数内:可以直接创建
Inner
类对象并使用。例如:
class Outer {
public:
class Inner {
public:
void print() {
std::cout << "Inner class print" << std::endl;
}
};
void createInner() {
Inner inner;
inner.print();
}
};
- 在Outer类的友元函数或友元类中:例如上述将
Inner
类声明为Outer
类友元类的例子,在Inner
类成员函数内可以创建Inner
类对象使用。
- 在全局作用域(需要完整的作用域限定):如果要在全局作用域创建
Inner
类对象,需要使用完整的作用域限定。例如:
class Outer {
public:
class Inner {
public:
void print() {
std::cout << "Inner class print" << std::endl;
}
};
};
int main() {
Outer::Inner inner;
inner.print();
return 0;
}