什么是构造函数在c ++中的实际应用

What's a constructor real application in c++

我可以使用构造函数从 class 初始化一个成员变量,当然,但我也可以通过创建一个 class 类型的变量来实现,我可以从中使用它的成员并通过执行一个函数来初始化它们。所以,我想知道构造函数的使用是否与减少内存使用或使应用程序响应更快的实时增强有关。

这里我举了一个我在网上找到的例子。试图了解构造函数在 c 程序中以及在现实生活中的实际用法。

#include <iostream>
 using namespace std;
 class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line(); 

   private:
      double length;
};
 Line::Line(void)
{
    cout << "Object is being created" << endl;
}
 void Line::setLength( double len )
{
    length = len;
}
 double Line::getLength( void )
{
    return length;
}
int main( )
{
   Line line;


   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl;

   return 0;
}

一个原因是减少了错误的范围。允许在 invalid/nonsensical 状态下构建对象意味着它可以在该状态下使用。

Line line;

// any read line.length is undefined behaviour
// What is the benefit of that?

line.setLength(6.0);

构造函数允许您以有效和所需的状态初始化实例,这意味着它们可以立即使用而无需进一步操作。

此外,在术语方面,line.setLength(6.0) 不会初始化 成员,它会修改已经初始化的成员。

在现实生活中,在较大的重要项目中,您忘记调用自己的初始化程序,使对象处于未初始化状态。但是你不能忘记调用构造函数。

构造函数提供了一种语法,可以保证您的对象在创建时完全初始化。

当您创建的对象在未处于未初始化状态之前需要额外的函数调用时,错误比比皆是。

有理由支持构造函数而不是方法,而且这些原因通常取决于上下文。让我们首先考虑支持构造函数的最明显的原因:不可变对象。一个被认为是不可变的对象在其初始构造(声明和构造的地方)后永远不会改变其状态。通常,此类不可变对象将其成员变量保密,并允许您根据各种函数(例如,字符串的 substring 例程)创建它们的其他实例。

另一方面,在其整个生命周期中经历各种状态变化的对象(例如,游戏板)可能需要客户端调用来修改它们的状态。然而,即使这些对象也会以某种方式初始化(​​例如,想想国际象棋、西洋跳棋、数独等),并且应该需要一个基本的构造函数来确保它们从 "sane" 初始状态开始。

方法可以初始化对象,但这只是在某些情况下是合法的。例如作为引用的成员变量必须在构造函数列表中初始化,需要参数的变量,常量变量等...

从性能的角度来看,我不知道如何解决这个问题...但是编写干净清晰的代码总是能让其他程序员高效地阅读您的代码,而且,我敢说, 快乐的! :-)