班级成员可见性C++
Class members visibility C++
我需要使类的初始值设定项对子类不可见,但对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;
}
请注意,此设计确保只能从类创建一个实例。
相关文章:
- 如何更改唯一指针向量的可见性
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 班级成员可见性C++
- 内联模板函数的可见性
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- std::mutex 的发布-获取可见性保证是否仅适用于关键部分?
- 符号可见性和 gcc 警告
- C++/libscreen 无法更新可见性
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- C++继承构造函数的可见性
- CRTP - 嵌套叶类类型的可见性
- C++模板 - 实例之间的通用操作和成员可见性
- 放松的订单和线程间可见性
- GCC 6.x警告有关Lambda可见性
- C++ 中的Shared_ptr和内存可见性
- 静态库中的符号可见性和操作
- 未直接继承的基模板类成员的可见性
- 从shm_open() mmap()更改对共享内存的可见性
- 关于Lambdas,转换以功能指针以及私人数据成员的可见性