C++ 类成员可见性C++;

C++ 类成员可见性C++;,c++,C++,我需要使类的初始值设定项对子类不可见,但对main()可见。我怎么做?我看到的唯一方法是将其公开,但它将被继承到子类。有什么想法吗?您可以将其设置为私有,并将main添加为好友 class A { private: A() {} public: friend int main(void); }; int main(void) { // Your code } 您可以将其设置为私有,并将main添加为好友 class A { private: A() {} publi

我需要使类的初始值设定项对子类不可见,但对main()可见。我怎么做?我看到的唯一方法是将其公开,但它将被继承到子类。有什么想法吗?

您可以将其设置为私有,并将main添加为好友

class A {
private:
    A() {}
public:

friend int main(void);
};

int main(void) {
    // Your code
}

您可以将其设置为私有,并将main添加为好友

class A {
private:
    A() {}
public:

friend int main(void);
};

int main(void) {
    // Your code
}

将初始值设定项设置为私有(即使在main中也无法访问初始值设定项),您可以遵循许多设计模式来解决问题。其中一种设计模式是Singelton。 示例如下所示:

#include <iostream>

using namespace std;

class A{
    private:
    static A *single_instance;

    //private constructor, cannot be inherited
    A(){

    }

    public:
    //for getting access in main
    static A *getInstance() {
        if (single_instance==NULL){
            single_instance = new A();
        }
        return single_instance;
    }

    void print() {
        cout<<"I'm from A";
    }


};
//initializing with NULL
A *A ::single_instance=NULL;

class B:A {
    //not access to the constructor

    //but access to getInstance()
};

int main()
{
    //now you can access it in main
    A *obj = obj->getInstance();
    obj->print();
    return 0;
}
#包括
使用名称空间std;
甲级{
私人:
静态A*单个_实例;
//私有构造函数,不能被继承
(){
}
公众:
//用于进入主通道
静态A*getInstance(){
if(单实例==NULL){
单个_实例=新的A();
}
返回单_实例;
}
作废打印(){
coutprint();
返回0;
}

请注意,此设计确保只能从类中创建一个实例。

将初始值设定项设置为私有(即使在main中也无法访问初始值设定项),可以遵循许多设计模式来解决问题。其中一种设计模式是Singelton。 示例如下所示:

#include <iostream>

using namespace std;

class A{
    private:
    static A *single_instance;

    //private constructor, cannot be inherited
    A(){

    }

    public:
    //for getting access in main
    static A *getInstance() {
        if (single_instance==NULL){
            single_instance = new A();
        }
        return single_instance;
    }

    void print() {
        cout<<"I'm from A";
    }


};
//initializing with NULL
A *A ::single_instance=NULL;

class B:A {
    //not access to the constructor

    //but access to getInstance()
};

int main()
{
    //now you can access it in main
    A *obj = obj->getInstance();
    obj->print();
    return 0;
}
#包括
使用名称空间std;
甲级{
私人:
静态A*单个_实例;
//私有构造函数,不能被继承
(){
}
公众:
//用于进入主通道
静态A*getInstance(){
if(单实例==NULL){
单个_实例=新的A();
}
返回单_实例;
}
作废打印(){
coutprint();
返回0;
}

请注意,此设计确保只能从类中创建一个实例。

除了描述问题外,请显示一个代码示例。这是一个非常奇怪的要求,似乎是反模式的。实际要求和推理是什么?声明构造函数
private
,然后声明
main()
作为类的一部分,你所说的“类的初始值设定项”是什么意思?除了描述问题外,请展示一个代码示例。这是一个相当奇怪的要求,似乎是反模式的。实际的要求和理由是什么?声明构造函数
private
,然后声明
main()
作为类的一员,“类的初始值设定项”是什么意思?这不是单例的好用法,但是如果你发现单例是一个很合适的例子,更喜欢使用a,因为当事情变得更复杂时,它更容易,也不太可能在你脸上爆炸。是的!我明白了!谢谢。这不是单例的好用法,但是如果你发现单例是一个很合适的例子,更喜欢使用a,因为它更适合你当事情变得更复杂时,你的脸会更容易爆炸。是的!我明白了!谢谢。让
main
完全访问这个类的所有内部内容似乎有点错误。我不认为这个问题有一个好的解决方案。让
main
完全访问所有的int似乎有点错误我认为这个问题没有一个好的解决方案