班级成员可见性C++

Class members visibility C++

本文关键字:C++ 可见性 成员      更新时间:2023-10-16

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

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

class A {
private:
A() {}
public:
friend int main(void);
};
int main(void) {
// Your code
}

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

#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;
}

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