Jac*_*kin 25
private当你从类中调用它时,你应该在不需要其他对象或类来访问函数时创建一个函数.
坚持最小特权原则,只允许访问绝对必要的变量/函数.任何不符合这个标准的东西应该是private.
Naw*_*waz 21
我通常会做助手功能private.但帮助者 似乎含糊不清.那么让我举个例子.假设你有以下课程Sample; 它暴露了很少的公共功能,其中一个就是说DoWork().该函数有一个参数.但它并不假设参数始终有效,因此它首先检查参数的有效性,该参数在函数开头有很多代码.像这样的东西:
class Sample
{
public:
void DoWork(SomeClass param)
{
/*
*lots of code related to validation of param
*/
//actual code that operates on the param
//and other member data IF the param is valid
}
};
Run Code Online (Sandbox Code Playgroud)
由于您编写了许多与验证param相关的代码,因此它使函数变得繁琐且难以阅读.因此,您决定将此验证代码移动到函数说,IsValidParam()然后DoWork()通过将参数传递param给它来调用此函数.像这样的东西:
class Sample
{
public:
void DoWork(SomeClass param)
{
if ( IsValidParam(param))
{
//actual code that operates on the param
//and other member data IF the param is valid
}
}
};
Run Code Online (Sandbox Code Playgroud)
看起来更干净吧?
好吧,你已经IsValidParam()在课堂上的某个地方写过了,但你现在面临的问题是,你能做到这个功能public吗?如果此功能仅由您的其他功能使用DoWork(),则IsValidParam() 公开没有意义.所以你决定做这个功能private.
class Sample
{
public:
void DoWork(SomeClass param)
{
if ( IsValidParam(param))
{
//actual code that operates on the param
//and other member data IF the param is valid
}
}
private:
bool IsValidParam(SomeClass param)
{
//check the validity of param.
//return true if valid, else false.
}
};
Run Code Online (Sandbox Code Playgroud)
这种功能(IsValidParam)应该是private.我将这些函数称为辅助函数.
希望这个解释能帮到你!
OOP的创始原则之一是封装.这是对象如何工作的功能保持在该对象的内部.这个想法是,如果代码不需要知道它是如何工作的,那么它就更容易使用它.有点像买微波炉 - 你只需要知道如何使用它而不是如何使用它.
OOP应采用相同的方法.保留维护对象私有所需的一切.仅制作完全使用对象public所需的内容.