Oop 将所有参数传递给类构造函数与将参数传递给成员函数
这个问题是关于OOP设计的。 将所有参数传递给类构造函数与将参数传递给成员函数相比,有哪些优点/缺点 在我的例子中,我知道程序开头的所有参数,在程序结束之前我不需要更改它们 在C++中,情况会是这样的(虽然在我的代码中,我需要解析更多的参数,而成员函数更复杂): vs 我正在使用的一个策略是:如果我需要多成员函数中的变量,我将其设置为类变量。这是好方法还是最好的方法 将所有内容传递给构造函数的一个缺点是,它会有很多参数。而且我不需要在main中调用类成员函数Oop 将所有参数传递给类构造函数与将参数传递给成员函数,oop,Oop,这个问题是关于OOP设计的。 将所有参数传递给类构造函数与将参数传递给成员函数相比,有哪些优点/缺点 在我的例子中,我知道程序开头的所有参数,在程序结束之前我不需要更改它们 在C++中,情况会是这样的(虽然在我的代码中,我需要解析更多的参数,而成员函数更复杂): vs 我正在使用的一个策略是:如果我需要多成员函数中的变量,我将其设置为类变量。这是好方法还是最好的方法 将所有内容传递给构造函数的一个缺点是,它会有很多参数。而且我不需要在main中调用类成员函数 请解释我应该遵循的主要原则。在构造函
请解释我应该遵循的主要原则。在构造函数中放置参数的好处:
- 实例的初始化更加完整(调用函数的顺序没有问题,以获得“完整”的有用实例)
将参数放入特定函数的好处:
- 更灵活,因为函数使用变量而不是传递给构造函数的“常量”
- 传递给函数的参数往往更适合于函数(例如,对于paintRectangle,传递颜色是合乎逻辑的,但如果颜色从未更改,为什么要在以后灵活更改颜色?)
- 创建一个结构来传递变量
- 创建一个子类…如果您需要5-7个以上的参数,那么该类的责任可能太大
- 使用命名参数(更清晰,但参数数量仍然相同)
一般来说,使类尽可能有限,不要使它们比需要的更灵活,除非您事先知道在以后的阶段需要该功能。将参数放入构造函数的好处:
- 实例的初始化更加完整(调用函数的顺序没有问题,以获得“完整”的有用实例)
将参数放入特定函数的好处:
- 更灵活,因为函数使用变量而不是传递给构造函数的“常量”
- 传递给函数的参数往往更适合于函数(例如,对于paintRectangle,传递颜色是合乎逻辑的,但如果颜色从未更改,为什么要在以后灵活更改颜色?)
- 创建一个结构来传递变量
- 创建一个子类…如果您需要5-7个以上的参数,那么该类的责任可能太大
- 使用命名参数(更清晰,但参数数量仍然相同)
一般来说,尽可能地限制类,不要使它们比需要的更灵活,除非您事先知道在以后的阶段需要功能。构造函数最重要的一点是,它们使您的OOP代码保持一致。对于任何对象,如果您已经知道,有人创建与属性相关的属性必须存在 i、 e.没有“高度”矩形就不能存在 因此,“最小参数构造函数”是一个很大的优势。(在计算面积时,对象需要具有最小的所需参数,以便可用且不会崩溃)
如果您有更多的参数,而这些参数不是必需的,那么最好根据可能“经常使用”的内容创建更多的构造函数构造函数最重要的一点是它们使OOP代码保持一致。对于任何对象,如果您已经知道,使用属性创建的对象必须存在的话,这是一种很好的方法 i、 e.没有“高度”矩形就不能存在 因此,“最小参数构造函数”是一个很大的优势。(在计算面积时,对象需要具有最小的所需参数,以便可用且不会崩溃)
如果你有更多的参数,它们不是必需的,那么根据你的对象可能“经常使用”的内容创建更多的构造函数是很好的。老实说,第二个命题不错……但这不再是oop。老实说,第二个命题不错……但这不再是oop。
// All arguments in class constructor
Rectangle::Rectangle(float base, float height, string rectColor){
this->area = 0;
this->base = base;
this->height = height;
this->rectColor = rectColor;
}
void Rectangle::calcArea(){
area = base * height;
}
void Rectangle::paintRectangle(){
// use area
// whatever
}
// Arguments in member functions
Rectangle::Rectancle(){
this->area = 0;
}
void Rectangle::calcArea(float base, float height){
area = base * height;
}
void Rectangle::paintRectangle(string rectColor){
// use area
// whatever
}