OOP 设计 - 将类成员变量作为类中的方法参数传递
OOP Design - Passing class member variables as method arguments within class
这里有简单的示例代码,它不是最好的:
使用成员而不在参数中传递它:
class Car
{
public:
void doSomething()
{
// doing something
onEngineFailure();
}
private:
void onEngineFailure()
{
// Operate on m_Engine
}
private:
Engine m_Engine;
};
将成员作为参数传递:
class Car
{
public:
void doSomething()
{
// doing something
onEngineFailure(m_Engine);
}
private:
void onEngineFailure(const Engine& engine)
{
// Operate on engine
}
private:
Engine m_Engine;
};
在第一个示例中,方法 onEngineFailure
直接对类成员变量 m_Engine
进行操作。将其作为函数参数传递是没有意义的,因为汽车只能有一个引擎,而onEngineFailure
运行的引擎将始终m_Engine
。
在第二个示例中,方法 onEngineFailure
在通过参数传递的引擎上运行。无论如何,这将永远m_Engine
。
那么,哪一个在设计上更正确呢?如果方法已经可以访问成员变量并且它总是只对它进行操作,那么为什么要将其作为参数传递。但是,全局变量也可以这样说,但应尽可能少地使用全局变量。
那么,哪一个在设计上更正确呢?如果方法已具有访问权限 到成员变量,它将始终只对它进行操作,那么为什么 将其作为参数传递。
完全。1
然而,对于全局变量也可以这样说,
除了绑定到特定对象实例的变量与其他实例分开,它们的一致性在对象级别进行管理。借助封装,您可以将它们隐藏起来并确保正确使用它们。
以此类推,所有变量都驻留在 RAM 中,但它们是否因此而成为全局变量?不,因为它们之间的逻辑区别很重要。
1在这个例子中,它可能没有多大意义。但是,如果函数的功能足够通用,可供其他类使用,则将其设置为自由函数或静态公共函数是有意义的。使函数静态的能力有时也很重要,因为其他原因,在这些情况下,显式(有时直接this
)参数使它成为可能/更容易。
第一个代码片段是优雅而干净的方式。由于成员函数可以访问数据成员,因此不需要将数据成员作为参数传递。
如果要根据外部输入更改数据m_Engine成员的状态,则需要(引擎)类型的参数。 它将按以下方式完成。
void doSomething(Engine engine)
{
// doing something
onEngineFailure(engine);
}
void onEngineFailure(const Engine& engine)
{
// copy it here say m_Engine.model=engine.model;
}
- 将成员函数指针作为参数传递给模板方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何将带有参数的方法传递给线程以执行?
- 在C++中传递数组作为函数参数的方法
- 将带有模板化方法的类作为带有GCC的模板参数传递
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 如何将提升回调作为参数传递给方法?
- 将方法作为模板化参数传递 C++11
- 将 std::ofstream 对象作为参数传递给类方法
- 将给定的 vararg 参数传递给另一个函数的适当方法是什么?
- 将指针类方法作为参数传递给其他类方法C
- 如何将基类方法超载作为参数传递到C 中的模板类
- 将非静态数据成员作为默认参数传递给方法
- 将数组作为函数参数传递,并在其上调用开始/结束方法
- 将对象数组作为参数传递的最佳方法是什么
- 将参数传递给模板函数的方法
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C++ "Best"参数传递方法