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

What's a constructor real application in c++

本文关键字:应用程序 构造函数 c++ 什么      更新时间:2023-10-16

我可以从类中初始化成员变量,例如使用构造函数,当然,但我也可以通过创建类型为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;
}

在实际情况中,在较大的重要项目中,您可能会忘记调用自己的初始化器,从而使对象处于未初始化状态。但是你不能忘记调用构造函数

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

如果创建的对象在未初始化状态之前需要调用额外的函数,则会出现大量错误。

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

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

方法可以初始化对象,但这只是有时合法。例如,作为引用的成员变量必须在构造函数列表中初始化,需要形参的变量,const类型的变量,等等……

从性能的角度来看,我不知道如何解决这方面的问题…但是,编写干净清晰的代码总是会让其他阅读你代码的程序员效率更高,而且,我敢说,他们会很高兴!: -)

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

Line line;
// any read line.length is undefined behaviour
// What is the benefit of that?
line.setLength(6.0);

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

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