BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #32279同步于 2009/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

这样的数据类型怎么写?

wqchen
2009/11/27镜像同步12 回复
类里有一个成员变量,它被所有该类对象共享,该变量是程序启动时从文件中读入的,当读入值以后就不能再修改它了,而我又不希望从该类的初始化列表中初始化,因为程序启动时还不想创建该类对象。不知道定义成什么类型好。 const static 貌似不行,因为它必须在类.cpp中定义。光const又要从初始化列表中初始化。光static又可能会被随便修改。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
pb03000804机器人#1 · 2009/11/27
把这个变量单独封装成一个单件模式类,然后在你想使用的类中加一个指向这个变量类的指针就行了。
wifil机器人#2 · 2009/11/27
初始化后,对该类的操作只提供const的接口
ericyosho机器人#3 · 2009/11/27
所有对象共享,还是static比较靠谱。 想问,为什么const static不行,这个必须在.cpp文件中定义,怎么了?
ltmit机器人#4 · 2009/11/28
【 在 pb03000804 的大作中提到: 】 : 把这个变量单独封装成一个单件模式类,然后在你想使用的类中加一个指向这个变量类的指针就行了。 正解!
devc机器人#5 · 2009/11/28
也觉得 static 靠谱 定义一个常量接口,初始化之后static成员后,只从这个借口取值。 试试看呗...
wqchen机器人#6 · 2009/11/28
1楼的方法确实应该可行,不过这样就必须把本来属于不同类的变量都交由那个单件类管理了,我还是想把这些变量分散在各个类中。
pb03000804机器人#7 · 2009/11/28
那就把不同类的变量定义成不同的单件类咯,可以把单件类作为这个类的私有成员类,外面是看不到的 呵呵 【 在 wqchen 的大作中提到: 】 : 1楼的方法确实应该可行,不过这样就必须把本来属于不同类的变量都交由那个单件类管理了,我还是想把这些变量分散在各个类中。
epavel机器人#8 · 2009/11/28
【 在 pb03000804 的大作中提到: 】 : 把这个变量单独封装成一个单件模式类,然后在你想使用的类中加一个指向这个变量类的指针就行了。 大赞
wqchen机器人#9 · 2009/11/28
做成私有类后也只有在该类中才能初始化了吧?可能我的问题描述的不清楚。 我想了想,用个Flag标识一下就可解决,这里的数据肯定要声明为static,而各个类中的这些static数据又要让一个统一的类(Init)来赋值,其实就是限制这些static成员只能被改写一次。那么在Init中设一个static bool isNULL = true ; 表示可改写,改写调用各个类的Set方法,该方法检查Init::isNULL是否为true。一旦从文件中读入数据后,将isNULL设为false. 这样具体的各个类中如果再调用Set方法时,因为isNULL == false而拒绝再次对static成员赋值即可。 [size=4]class MemberToBeChanged{ private: static int i; //要被Init改变的static成员 public: static void Set(int i){ if( Init::isNULL ) this->i = i; } }; class Init{ //这个类也只会被使用一次 public: static bool isNULL = true; static void change(){ if( !isNULL ) return; int i = 10 ; A::Set(i); isNULL = false; //修改完后,关门,不准再次打开 } };【 在 pb03000804 的大作中提到: 】 : 那就把不同类的变量定义成不同的单件类咯,可以把单件类作为这个类的私有成员类,外面是看不到的 呵呵 [/size]