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

时间:2016-09-21 14:30:45

标签: oop

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

在我的情况下,我知道程序开头的所有参数,我不需要在程序结束之前更改它们。

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

// 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
}

VS

// 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
}

我使用的一个策略是:如果我需要多个成员函数中的变量,我将它变成一个类变量。那是好的还是最好的方法?

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

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

2 个答案:

答案 0 :(得分:0)

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

  • 实例更完整地初始化(调用函数的顺序没有问题,以获得一个完整的实用实例。

为特定函数添加参数的好处:

  • 更灵活,因为函数使用变量而不是'常量'传递给构造函数
  • 传递给函数的参数倾向于更好地属于函数(例如,对于paintRectangle,传递颜色是合乎逻辑的,但如果它永远不会改变,为什么之后可以灵活地改变颜色?)

防止cnstructor中的参数太多

  • 创建一个传递变量的结构
  • 创建一个子类......如果你需要超过5-7个参数,那么这个类的责任可能太大了。
  • 使用命名参数(更清晰,但参数数量相同)

一般来说,尽量限制课程,不要让课程比需要的更灵活。除非你事先知道,否则后期需要这些功能。

答案 1 :(得分:0)

构造函数最重要的一点是它们使您的OOP代码保持一致。对于任何对象,如果您已经知道,使用属性创建的人必须存在,这是一种很好的方法。

即。没有" height"。

,矩形不能存在

因此"最小参数构造函数"是很大的优势。 (在计算即区域时,对象需要的最小参数,可用和不能崩溃)

如果你有更多的参数,它们不是必需的,那么最好根据可能的情况创建更多的构造函数"经常使用"你的对象。