C++ 简化将成员传递到包含类的方法(在C+;+;)
我环顾四周,但找不到我要找的内容(不确定使用什么关键字)。我自己在做C++项目。该项目有C++ 简化将成员传递到包含类的方法(在C+;+;),c++,oop,inheritance,C++,Oop,Inheritance,我环顾四周,但找不到我要找的内容(不确定使用什么关键字)。我自己在做C++项目。该项目有窗口s、页面s和字段s。窗口可以包含一个或多个页面s,而页面可以包含一个或多个字段s。在窗口、页面和字段中共享的是,它们有一个输入管理器,负责用户的所有IO。InputManager可以作用于窗口、页面和字段(例如,有些输入直接作用于页面,而有些则作用于字段)。另外,字段可以生成状态消息,显示在包含窗口的位置 现在我有以下结构,但它似乎不是最优的。有很多指针向下传递,我想知道是否有更好的方法 class In
窗口
s、页面
s和字段
s。窗口
可以包含一个或多个页面
s,而页面
可以包含一个或多个字段
s。在窗口
、页面
和字段
中共享的是,它们有一个输入管理器
,负责用户的所有IO。InputManager
可以作用于窗口、页面和字段(例如,有些输入直接作用于页面
,而有些则作用于字段
)。另外,字段
可以生成状态
消息,显示在包含窗口的位置
现在我有以下结构,但它似乎不是最优的。有很多指针向下传递,我想知道是否有更好的方法
class InputManager
{
//do stuff to return input
}
class StatusManager
{
//do stuff to display statuses
}
class Field
{
friend class Page;
protected:
InputManager *input_manager;
StatusManager *status_manager;
/*
other methods that do stuff that
may recieve from input_manager and
send statuses through the status_manager
*/
}
class Page
{
friend class Window;
protected:
vector<Field* > fields;
InputManager *input_manager;
StatusManager *status_manager;
public:
AddField(Field *field)
{
field->input_manager = this->input_manager;
field->status_manager = this->status_manager;
}
}
class Window
{
protected:
vector<Page *> pages;
InputManager *input_manager;
StatusManager *status_manager;
public:
Window()
{
input_manager = new InputManager();
status_manager = new StatusManager();
}
AddPage(Page *page)
{
page->input_manager = this->input_manager;
page->status_manager = this->status_manager;
}
}
类输入管理器
{
//做一些事情来返回输入
}
类状态管理器
{
//做一些事情来显示状态
}
类字段
{
好友类页面;
受保护的:
输入管理器*输入管理器;
StatusManager*状态管理器;
/*
其他的方法可以做到这一点
可从输入管理器和
通过状态管理器发送状态
*/
}
类页
{
好友类窗口;
受保护的:
向量场;
输入管理器*输入管理器;
StatusManager*状态管理器;
公众:
添加字段(字段*字段)
{
字段->输入管理器=此->输入管理器;
字段->状态管理器=此->状态管理器;
}
}
类窗口
{
受保护的:
矢量页面;
输入管理器*输入管理器;
StatusManager*状态管理器;
公众:
窗口()
{
输入管理器=新的输入管理器();
状态管理器=新状态管理器();
}
添加页面(第*页)
{
页面->输入管理器=此->输入管理器;
页面->状态管理器=此->状态管理器;
}
}
如果我想更多地了解这些类型的问题,我应该研究哪些关键字或字段?尝试使用
unique\u ptr
而不是new
另一种方法是将输入和状态对象传递给需要它们的方法,但很难说在你的情况下,这是否总体上更好。目前我仅限于C++0x,但我将在将来记住这一点developments@VaughnCato你能再解释一下吗?你是说依赖注入吗?我的意思是拥有Field::method(InputManager&,StatusManager&)
,当调用Field::method
时,要求字段
用户传递InputManager
和StatusManager
参数,而不是将它们存储在字段中。尝试使用unique\u ptr
而不是new
另一种方法是将输入和状态对象传递给需要的方法他们,但很难说在你的情况下,这是否总体上更好。目前我仅限于C++0x,但我将在将来记住这一点developments@VaughnCato你能再解释一下吗?你是说依赖注入吗?我的意思是拥有Field::method(InputManager&,StatusManager&)
,并要求Field
用户在调用Field::method
时传递InputManager
和StatusManager
参数,而不是将它们存储在字段中。