2010-10-20 87 views
0

可以说我有这样的事情编码类交互设计

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和其他类的指针,以便它可以将其存储在私有成员中以供访问。

或者它们总是根据需要何时构建/销毁这些类。

而且他们做什么用,所有的实际数据存储和很多其他类需要访问它

还是我的设计想法是完全错误的,人们在现实世界中做一些其他的如*根指针办法?

回答

0

我真的不知道你在试图达到什么目的:如果可能,你的目标更清晰,但我会说的是,人们会通常创建一个名为'模式'的抽象界面,然后同时拥有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(); 
}; 

所以你只要把常用功能的模式界面,使他们的行为方式相同,但可以放在相同的模式变量内。要详细了解class inheritance and polymorphism look here。我希望这能回答你的问题。