假设我有类似下面这样的代码
class Normal_Mode;
class Fast_Mode;
class File_Control; //handles all operations with reading/writing in file
class Main_Control {
private:
some_class *root; //all other classes need access to root pointer since there is all the data(binary tree)
File_Control *c_file_control;
Fast_Mode *c_fast_mode;
...
}
Main_Control::Main_Control ( int argc, char* argv[]) {
...
if ( argc > 1 ) {
c_fast_mode = new Fast_Mode(argc, argv[]);
} else {
c_normal_mode = new Normal_Mode();
};
...
};
int main (int argc, char* argv[]) {
Main_Control c_main_control(argc,argv);
return 0;
}假设用户输入的argc >1,我很高兴在Fast_Mode类中处理用户输入,但当我完成并希望在Fast_Mode中将内容写入文件或从文件中读取内容时。现实世界中的人们如何访问File_control类?
它们是否使一些全局数组充满了指向这些类的指针,这些类只需要一个实例。
它们是否将指针传递给Fast_Mode和其他类,以便将其存储在私有成员中以供访问。
或者他们一直构造/销毁这样的类,这取决于何时需要它。
它们如何处理这样的*根指针,所有实际数据都存储在这里,许多其他类需要访问它
或者我的设计理念是完全错误的,而现实世界中的人们却以另一种方式去做?
发布于 2010-10-21 08:00:30
我真的不知道你的目标是什么:如果可能的话,让你的目标更清晰,但我想说的是,人们通常会创建一个称为“模式”的抽象接口,然后让Normal_Mode和Fast_Mode实现它。这样,您就可以编写以下代码:
class Main_Control {
private:
some_class *root; //all other classes need access to root pointer since there is all the data(binary tree)
File_Control *c_file_control;
Mode *c_mode;
...
};然后你可以像这样设置它:
if ( argc > 1 ) {
c_mode = new Fast_Mode(argc, argv[]);
} else {
c_mode = new Normal_Mode();
};因此,您只需将常用函数放在Mode接口中,以便它们的行为方式相同,但可以将它们放在相同的模式变量中。了解有关class inheritance and polymorphism look here的更多信息。我希望这能回答你的问题。
https://stackoverflow.com/questions/3983147
复制相似问题