gpt4 book ai didi

C++ 嵌套类 - 内部/外部关系

转载 作者:可可西里 更新时间:2023-11-01 17:01:41 26 4
gpt4 key购买 nike

我在我们的社区和外部阅读了一些关于嵌套类的帖子,我很困惑。

据我所知,在 C++ 中,嵌套类与分离/独立类没有任何区别。

当我试图更好地理解这个概念时,我写了一个简单的代码,我发现一个内部类可以访问一个外部类,而无需与外部类建立友元。

例如:

class Outer {
private : // default access modifier
int x;
static int sx;
public:
class Inner {
public:
void changeOuterDataMemberValues(int value) {
sx = value; // changes the private static data member of Outer.

Outer out;
out.x = value; // changes the private data member via object (not via class!)
}
void printMyOuterDataMember() {
cout << sx; // prints the private data member of Outer.
}
};
};


class Lonesome {
void tryingToChangeDataMemberValue(int value) {
Outer::sx = value; // cannot change the private static data member of Outer.
}
};

int Outer::sx;

您可以看到嵌套在外部类中的内部类可以访问它的(外部类)数据成员,而作为独立类的孤独类不能访问外部类的数据成员。

如果这是一个重复或愚蠢的问题,我深表歉意,但我只想与你们确认,嵌套类和独立类(两个不同的类,它们不有内/外关系)。

谢谢大家辛迪加 =]

最佳答案

C++03 和 C++11 在这方面是有区别的。所以答案因您使用的编译器而异。

如果您使用的是 C++03 兼容编译器,则:

嵌套类无法访问封闭类的所有成员。

如果您使用的是 C++11 兼容编译器,那么:

嵌套类可以访问封闭类的所有成员。嵌套类仅被视为该类的另一个成员。

C++03 标准 11.8 嵌套类:
§1

The members of a nested class have no special access to members of an enclosing class, nor to classes or functions that have granted friendship to an enclosing class; the usual access rules shall be obeyed.

C++11 标准 11.7 嵌套类:

A nested class is a member and as such has the same access rights as any other member.

关于C++ 嵌套类 - 内部/外部关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14607226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com