关于构造函数的问题
Questions about the constructors
所以,我刚刚读到关于构造函数初始化器的内容以及它们为什么重要。
所以,在这方面,我之所以这么问,只是因为它没有被明确提及,我不想学到错误的东西。
因此,在非初始化构造函数的情况下,例如:
Student(int i, string s) {
id = i;
name = s;
}
调用构造函数时(创建实例时自动调用),在输入构造函数的主体之前,成员id和name是否首先分别初始化为int和string的默认值(这些默认值是什么?),当输入主体时,它们分别用i和s覆盖。我的解释正确吗?
如果是这样的话,那么初始化器构造函数如下所示:
Student(int i, string s) : id(i), name(s) {}
统治至高无上,应该一直使用,对吧?
在这种情况下,为什么要教另一个构造函数呢?
基本数据类型未初始化。对象是使用其默认构造函数创建的。
在您的示例中,它们确实被新值覆盖了。根据类型的不同,这可能是低效的,因为在默认构造函数中完成的工作可能会被浪费。在基本类型的情况下,编译器可以优化初始化,在std::string
(应该通过const引用btw传递)的情况下与复制字符串的成本相比,它有一个相对便宜的默认构造函数。因此,尽管初始化列表应该是preferred样式,但在这种情况下不使用它并不是很糟糕。
之所以有构造函数,是因为您可能有比简单地复制一些数据或将其分配给简单值更复杂的逻辑。尝试创建自己的字符串类,该类使用const char *
参数。
sample::sample(int a)
{
cout<< anim;
anim = a;
cout<< anim;
}
调用时
sample *Anim = new sample(10);
输出为:
0(grabage值由编译器分配。你不应该从未初始化的变量中读取,没有规则它总是给出0,它只会打印一些垃圾值)
10
sample::sample(int a) : anim(a)
{
cout<< anim;
anim = a;
cout<< anim;
}
输出为:
10(我们正在分配的值)
10
在前一种情况下,值初始化发生在anim=a,即数据成员int anim
是用一些垃圾值创建的,并初始化为a
,在后一种情况中,初始化发生在创建数据成员时。
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- constexpr构造函数需要常量成员函数时出现问题
- 有关 c++ 构造函数的问题
- 关于复制构造函数的一个棘手问题
- 复制构造函数隐式转换问题
- 构造函数 (C++) 中的 char 指针参数存在问题
- C++:关于使用 Stroustrup 示例移动构造函数/赋值的问题
- 关于 std::bitset 构造函数的几个问题?
- 构造函数和 G++ 编译配方的问题
- 在 boost::variant 中类 holden 的复制构造函数存在问题
- C++ 关于两个类构造函数的问题
- 在构造函数 c++ 中初始化属性时出现问题
- 空构造函数和值传递问题
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- 复制和赋值构造函数的问题
- 变分模板递归构造函数问题
- C++中用户定义的构造函数出现问题
- C ++回测问题:如何检查构造函数在假定失败时是否失败(给定输入的无效参数)
- C++的抽象类继承和构造函数的问题
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?