构造函数,说白了,就是初始化。
具体的打法是这个样子的:

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);
}

可以得到如下输出:

c++中struct构造函数相关推荐

  1. C#中struct和class的使用区别是什么?

    class是引用类型,struct是值类型 引用类型在堆上,值类型是内联的. 值类型有全部的值的内容,而引用类型只有一个地址. 值类型总是有一个值,而引用类型指针可以为空. 为了优化减少体积 需要传递 ...

  2. C++之struct构造函数(2010-10-19 15:04:47)

    C++之struct构造函数 (2010-10-19 15:04:47) 转载 标签: cpp struct 构造函数 校园 分类: C/C_PlusPlus 在网络协议.通信控制.嵌入式系统的C/C ...

  3. C与C++中struct及C++中struct与class的区别

    C++中struct与class的区别 struct class 备注 成员函数 能 能 均有构造函数及析构函数 继承性 能 能 多态性 能 能 均有虚函数 默认成员属性 public private ...

  4. C++中Struct和Class的区别

    Struct和Class的区别 今天这篇博文主要讲解在C++中关键字struct和class的区别.这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解. 从语法上来讲,class和struct做 ...

  5. C#中struct和class的区别详解

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...

  6. C++之struct构造函数

    C++之struct构造函数 在网络协议.通信控制.嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体. 下面看看 ...

  7. 详解C++中的构造函数

    c++中的构造函数 一.构造函数作用 二.构造函数的特性 总结 一.构造函数作用 构造函数是一个特殊的成员函数,名字与类名相同,创建类对象时由编译器自动调用,以保证每个数据成员都有一个合适的初始值,并 ...

  8. php中的构造函数和析构函数,php 中构造函数和析构函数

    构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...

  9. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

    作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...

  10. golang中struct字段

    golang中struct字段名首字母必须大写,不然json无法解析 golang中struct字段后面json字段要小写或小写加下划线 golang中首字母大写表示共有

最新文章

  1. 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数...
  2. python install pip 区别_python conda、pip区别,python 下 faiss 安装
  3. 机器学习实战3-sklearn使用下载MNIST数据集进行分类项目
  4. 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
  5. mysql5.7.12安装_mysql 5.7.12 winx64手动安装教程
  6. RS232与RS485协议原理及应用
  7. linux打包解压包(tar.gz )
  8. 计算机组成原理:MIPS
  9. ecshop 框架 简单分析
  10. [转]移动App测试中的最佳做法
  11. 用Python写三级菜单的三个版本
  12. C语言:while后接分号“;”与不接分号“;”的区别
  13. PHP大数据量(大于50万)导出到Excel解决方案
  14. 区块链-拜占庭将军问题介绍
  15. Android混淆技术综述
  16. 【Linux】修改文件或文件夹权限的命令
  17. 前端汉字encode_前端常用的几种加密与解密
  18. 第1关:小球自由落体运动-------C语言程序设计技术(循环结构程序设计1)
  19. 了解工业物联网吗?工业物联网感知层、现场管理层、网络层介绍
  20. vue 单一页面_带有vue的单一Flash消息

热门文章

  1. 在虚拟机中安装Neokylin操作系统
  2. android 修改ip的scope的作用,Android Netd分析
  3. python设置主题背景
  4. 深度学习框架:动态图 vs 静态图
  5. V Rising 服务器搭建
  6. uva 10247 - Complete Tree Labeling(dp)
  7. ROS ros::NodeHandle nh(“~“)
  8. redis通过key模糊搜索_Redis中关于Key的模糊查找
  9. matlab教程 导入数据,MATLAB数据导入
  10. oracle取字段第三位字符,oracle字符串根据分隔符号获取第几个元素