gpt4 book ai didi

namespaces - 命名空间问题中的私有(private)/公共(public)类

转载 作者:行者123 更新时间:2023-12-04 16:53:15 26 4
gpt4 key购买 nike

这是一个关于将类定义为 public 或 private 的问题。

现在,我在命名空间内定义了各种类,我只希望其中一些类对外界可见/可用。

因此,例如,如果下面的类是程序中唯一的类,我希望 main.cpp 只能看到/使用 MyPublic 类,而不是 MyPrivate 类。我认为将 MyPrivate 类定义为私有(private)并将 MyPublic 类定义为公共(public)可以实现这一点,但下面的代码有效并且 main.cpp 能够声明一个 MyPrivate 对象。

可以在 C++ 中做到这一点吗?

MyPrivate.h:

namespace MyNamespace{

// only classes inside of the MyNamespace should be able
// to use this
private ref class MyPrivate{
...
};
}

我的公共(public).h:
#include "MyPrivate.h"

namespace MyNamespace {

// anyone can declare this
public ref class MyPublic{
...
private:
MyNamespace::MyPrivate^ p;
...
};
}

主.cpp:
#include "MyPublic.h"

int main(){

MyNamespace::MyPublic p_yes; // this is fine
MyNamespace::MyPrivate p_no; // don't want this to be possible

return 0;
}

最佳答案

在这种情况下,private/public 将影响类在程序集外部的可见性,如果您想创建一个“私有(private)”的类,意味着它只能由其他某个类使用,您可以使用嵌套类机制,例如这:

命名空间我的命名空间{
公共(public)引用类 MyPublic {
私有(private)的:

引用类 MyPrivate {
上市:
整数 x;
};

我的私有(private)^ p;
};
}

//编辑:
顺便说一下,您仍然可以在 public: 中抛出这个嵌套类。部分并像这样使用它:MyNamespace::MyPublic::MyPrivate priv;

关于namespaces - 命名空间问题中的私有(private)/公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1150846/

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