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

标签 c++

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

据我所知,在 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/

相关文章:

c++ - CentOS 6.02 64 位操作系统中的 OpenSSL 构建错误

c++ - 使用 C/C++ 自动化 Internet Explorer

c++ - 取消引用指针以操纵地址的内容

c++ - 检查 GTest 中 EXPECT_* 宏的结果或在 ASSERT_* 失败时运行代码

C# 结构如 std::set 支持 lower_bound

c++ - 非静态函数可以修改c++中的静态变量吗

c++ - MFC对话窗口不出现

c++ - 从另一个进程调用 SetDllDirectory 不起作用?

c++ - 返工 make 文件以将 obj 放入不同的位置

c++ - 是否可以使用迭代器创建成员字段的值列表?