c++中struct构造函数
·
构造函数,说白了,就是初始化。
具体的打法是这个样子的:
struct node{
//构造函数
node()//形参表
{
//内容
}
};
例子:
struct node{
node(int c)
{
x=c;
y=z=0;
}
int x,y,z;
};
当然,他既然作为一个函数,那么在里面自然能够塞一些其他东西,比如说跑个SPFA呀、弄个Hello World
呀,都是没有什么问题的。
但是假如像上面一样写的话,严格来说这不是初始化,而是赋值,假如要做到初始化的话,可以打成下面这种形式:
struct node{
node(int c):x(0),y(c){}//注意这对象征性地大括号不能丢
int x,y;
};
下面来看一个程序,找找错误在哪里
#include <cstdio>
struct node{
node(int c):x(c){}
int x;
};
int main()
{
node a;
printf("%d",a.x);
}
答案:node a;
这就是struct的一个特性了,假如有了构造函数,那么定义的时候,就必须给构造函数提供参数。因为构造函数的触发条件是:定义。
没错,一定义就会触发。为什么呢?可以参考一下变量的初始化,如果有了构造函数,那么就相当于告诉了系统这个东西要如何初始化,那么系统在对它初始化的时候,就会调用形参表里面的东西,但如果你不给它,就出问题了。
所以,上面的程序的正确打法是这样的:
#include <cstdio>
struct node{
node(int c):x(c){}
int x;
};
int main()
{
node a(5);
printf("%d",a.x);
}
还有一点需要注意,假如形参表里面没有参数,那么在定义的时候,就不需要加括号了,假如加了括号,而括号里面没有东西的话,那么这条语句的意思就是声明一个返回值为node类型的函数了。(总之别作死就是了)
例子:
#include <cstdio>
struct node{
node():x(1){}
int x;
};
int main()
{
node a;
printf("%d",a.x);
}
然后,一个结构体也是可以有多个构造函数的,灵活运用会很方便,但是要求每个构造函数内的形参表不能一样,例:
#include <cstdio>
struct node{
int x;
node(int z):x(z){}
node():x(1){}
};
int main()
{
node a;
node b(5);
printf("%d %d\n",a.x,b.x);
}
可以得到如下输出:
更多推荐
已为社区贡献1条内容
所有评论(0)