Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 将所有参数传递给类构造函数与将参数传递给成员函数_Oop - Fatal编程技术网

Oop 将所有参数传递给类构造函数与将参数传递给成员函数

Oop 将所有参数传递给类构造函数与将参数传递给成员函数,oop,Oop,这个问题是关于OOP设计的。 将所有参数传递给类构造函数与将参数传递给成员函数相比,有哪些优点/缺点 在我的例子中,我知道程序开头的所有参数,在程序结束之前我不需要更改它们 在C++中,情况会是这样的(虽然在我的代码中,我需要解析更多的参数,而成员函数更复杂): vs 我正在使用的一个策略是:如果我需要多成员函数中的变量,我将其设置为类变量。这是好方法还是最好的方法 将所有内容传递给构造函数的一个缺点是,它会有很多参数。而且我不需要在main中调用类成员函数 请解释我应该遵循的主要原则。在构造函

这个问题是关于OOP设计的。 将所有参数传递给类构造函数与将参数传递给成员函数相比,有哪些优点/缺点

在我的例子中,我知道程序开头的所有参数,在程序结束之前我不需要更改它们

在C++中,情况会是这样的(虽然在我的代码中,我需要解析更多的参数,而成员函数更复杂):

vs

我正在使用的一个策略是:如果我需要多成员函数中的变量,我将其设置为类变量。这是好方法还是最好的方法

将所有内容传递给构造函数的一个缺点是,它会有很多参数。而且我不需要在main中调用类成员函数


请解释我应该遵循的主要原则。

在构造函数中放置参数的好处:

  • 实例的初始化更加完整(调用函数的顺序没有问题,以获得“完整”的有用实例)

将参数放入特定函数的好处:

  • 更灵活,因为函数使用变量而不是传递给构造函数的“常量”
  • 传递给函数的参数往往更适合于函数(例如,对于paintRectangle,传递颜色是合乎逻辑的,但如果颜色从未更改,为什么要在以后灵活更改颜色?)
防止cnstructor中的参数过多

  • 创建一个结构来传递变量
  • 创建一个子类…如果您需要5-7个以上的参数,那么该类的责任可能太大
  • 使用命名参数(更清晰,但参数数量仍然相同)

一般来说,使类尽可能有限,不要使它们比需要的更灵活,除非您事先知道在以后的阶段需要该功能。

将参数放入构造函数的好处:

  • 实例的初始化更加完整(调用函数的顺序没有问题,以获得“完整”的有用实例)

将参数放入特定函数的好处:

  • 更灵活,因为函数使用变量而不是传递给构造函数的“常量”
  • 传递给函数的参数往往更适合于函数(例如,对于paintRectangle,传递颜色是合乎逻辑的,但如果颜色从未更改,为什么要在以后灵活更改颜色?)
防止cnstructor中的参数过多

  • 创建一个结构来传递变量
  • 创建一个子类…如果您需要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
}