提问人: 提问时间:7/6/2019 更新时间:7/6/2019 访问量:72
通过赋值初始化类对象
Initialization of a class object by assignment
问:
我今天用构造函数做了一些实验:
class cls
{
int a;
public:
cls(){cout<<"Default constructor called\n";}
cls(int b){a=b;cout<<"Constructor with parameter called";}
}
然后这种初始化
cls x=5;
生成一个输出,指出已调用带有参数的构造函数。
我的问题 i:如果我有一个具有两个或更多参数的构造函数怎么办?我还能通过赋值使用初始化吗?
答:
1赞
Oblivion
7/6/2019
#1
您可以对更多参数执行相同的操作,如下所示:
#include <iostream>
class cls
{
int a;
double b;
public:
cls(){std::cout<<"Default constructor called\n";}
cls(int a): a(a){std::cout<<"Constructor with parameter called";}
cls(int a, double b) : a(a), b(b){std::cout<<"Constructor with two parameter called";}
};
int main()
{
cls t = {1, 1.5};
return 0;
}
评论
0赞
7/6/2019
那么在这里使用 () 和 {} 到底有什么区别呢?
1赞
L. F.
7/6/2019
我认为你不明白这个问题。这不是复制初始化。
0赞
JFMR
7/6/2019
@L.F. 这是直接初始化,不是吗?
1赞
L. F.
7/6/2019
@ElProfesor 是的。
1赞
Oblivion
7/6/2019
@trisct {} 是列表初始化,您可以使用cls t = {a, b};
上一个:如何在双向链表上实现复制分配?
评论
Foo x = {blah, blah};
-std=c++11
cls(int b){a=b;cout<<"Constructor with parameter called";}
-->cls(int b) : a(b) {cout<<"Constructor with parameter called";}
- 您希望在初始化列表中进行初始化,而不是默认先初始化它,然后在构造函数主体中分配给它。这是浪费,甚至不适用于无法默认构造或无法分配的类型。a