首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类交互设计

类交互设计
EN

Stack Overflow用户
提问于 2010-10-21 07:34:23
回答 1查看 230关注 1票数 0

假设我有类似下面这样的代码

代码语言:javascript
复制
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和其他类,以便将其存储在私有成员中以供访问。

或者他们一直构造/销毁这样的类,这取决于何时需要它。

它们如何处理这样的*根指针,所有实际数据都存储在这里,许多其他类需要访问它

或者我的设计理念是完全错误的,而现实世界中的人们却以另一种方式去做?

EN

回答 1

Stack Overflow用户

发布于 2010-10-21 08:00:30

我真的不知道你的目标是什么:如果可能的话,让你的目标更清晰,但我想说的是,人们通常会创建一个称为“模式”的抽象接口,然后让Normal_Mode和Fast_Mode实现它。这样,您就可以编写以下代码:

代码语言:javascript
复制
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;
       ...
};

然后你可以像这样设置它:

代码语言:javascript
复制
if ( argc > 1 ) {
   c_mode = new Fast_Mode(argc, argv[]);
} else {
   c_mode = new Normal_Mode();
};

因此,您只需将常用函数放在Mode接口中,以便它们的行为方式相同,但可以将它们放在相同的模式变量中。了解有关class inheritance and polymorphism look here的更多信息。我希望这能回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3983147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档