什么是 c++ 中的构造函数实际应用程序
What's a constructor real application in c++
我可以从类中初始化成员变量,例如使用构造函数,当然,但我也可以通过创建类型为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)
不初始化成员,它修改已经初始化的成员。
- 在C应用程序中运行C++(带有STL)函数
- 修改程序的入口点时未调用全局变量的构造函数
- 应用于运算符而不是构造函数的显式关键字
- 使用复制构造函数的程序输出错误
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 将数组作为多线程应用程序中函数的返回传递
- 在C++面向对象程序中,谁负责删除传递给构造函数的对象
- 此程序中不调用没有参数的构造函数
- 用于检索当前正在使用的应用程序的函数
- STD ::在模板函数中应用于构造函数
- 可以将属性应用于构造函数参数
- 在本地将 'using std::foo' 指令应用于构造函数初始值设定项列表 (C++)
- 当大括号初始值设定项列表中是否有序列点应用于构造函数时
- 从 C# 应用程序执行C++函数
- cl::程序构造函数之间的区别
- 如何从c++后台任务(Windows通用应用程序)调用c#函数
- 当从构造函数抛出异常时,应用程序崩溃
- 我如何从MFC应用程序调用函数的Win32 API版本
- 什么是 c++ 中的构造函数实际应用程序
- 寻找与不同的c++应用程序共享c++函数的不同方法