C++ 为什么我们需要C+中的构造函数+;,我们可以通过函数(初始化数据或访问私有数据成员)来做同样的事情

C++ 为什么我们需要C+中的构造函数+;,我们可以通过函数(初始化数据或访问私有数据成员)来做同样的事情,c++,constructor,C++,Constructor,请用一个完美的例子给出答案。 在下面的程序中,为什么我们需要构造函数,而我们可以通过函数做同样的事情。 (假设我们正在通过main()传递一些值) #包括 使用名称空间std; 类名{ 私人: int roll_num; 煤焦品位; 公众: void set_roll(int data);/*函数用于获取roll num和grade的值*/ 空集等级(字符等级1); 作废显示(作废); . . 名称(int…,char…)/*构造函数,用于与函数执行相同的操作*/ 一些成员需要在初始化时设置,如

请用一个完美的例子给出答案。 在下面的程序中,为什么我们需要构造函数,而我们可以通过函数做同样的事情。 (假设我们正在通过main()传递一些值)

#包括
使用名称空间std;
类名{
私人:
int roll_num;
煤焦品位;
公众:
void set_roll(int data);/*函数用于获取roll num和grade的值*/
空集等级(字符等级1);
作废显示(作废);
.
.
名称(int…,char…)/*构造函数,用于与函数执行相同的操作*/

一些成员需要在初始化时设置,如果要设置类的常量成员,则必须在构造函数中进行设置,例如:

class A{
    const int a;
    A(int b):a(b){}
};

构造函数允许您将类类型对象视为不透明的值,而不需要了解或维护它们的内部结构

考虑这个例子:

std::vector<std::string> v;

void save(std::string s)
{
    v.push_back(std::move(s));
}
std::vector v;
无效保存(标准::字符串s)
{
v、 推回(标准::移动);
}
我们可以将此函数称为
save(“helloworld”)
,我们可以将参数视为不透明的值。这是因为类
std::string
具有构造函数,这些构造函数执行必要的操作来创建内部状态并将状态转移到向量中的元素。用户不需要知道这一点,也不负责保持内部状态的一致性支架


对象不仅仅是它们的状态。它们还定义修改状态的方法。构造函数是其中的一个基本部分。

构造函数在创建新对象时准备新对象。它可以用于将变量设置为默认值或用户输入参数


使用函数来表示,设置变量值需要额外的步骤。这可以在对象创建过程中通过包含参数值来完成。

为什么我们需要类?我们可以对函数执行相同的操作。为什么我们需要函数?我们可以对复制/粘贴执行相同的操作。只要使用
c
,您就不必担心这些问题讨厌的构造函数和析构函数…不,实际上你不能在构造函数之外执行数据的初始化。你只能执行赋值。对于某些类型(经典示例:所有引用)来说,这是完全不同的.你真的很喜欢问关于构造函数的问题,嗯?也许阅读一些关于这个主题的教程或书籍会有助于澄清一些困惑。构造函数是一个函数。对,最初的问题是将初始化和赋值混为一谈。
std::vector<std::string> v;

void save(std::string s)
{
    v.push_back(std::move(s));
}