c++中struct构造函数

article/2025/6/18 8:23:28

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

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

可以得到如下输出:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/YUhCX2OW.shtml

相关文章

MATLAB struct函数(结构体数组)

文章目录 语法说明输入参数示例例1: 在结构体中存储相关数据变量例2: 具有一个字段的结构体例3: 具有多个字段的结构体例4: 带有空字段的结构体例5: 包含元胞数组的字段例6: 空结构体例7: 嵌套结构体 语法 s struct s struct(field,value) s struct(field1,value1,...,fiel…

等价无穷小的替换条件

等价无穷小的替换条件&#xff1a; 拓展&#xff1a; 常用等价无穷小&#xff1a;x趋于0时&#xff0c;x和sinx是等价无穷小&#xff1b;sinx和tanx是等价无穷小&#xff1b;tanx和ln(1x)是等价无穷小&#xff1b;ln&#xff08;1x&#xff09;和ex-1是等价无穷小&#xff1b;…

常见的几个等价无穷小

当时有&#xff1a; 1、sinx~x 2、tanx~x 3、arcsinx~x 4、arctanx~x 5、ln(1x)~x 6、~x 7、~ 8、~ax 9、~xlna 补充&#xff1a; 1、等价无穷小的定理&#xff1a;两个无穷小之比的极限为1&#xff1b; 2、等价代换适用于因子&#xff0c;不适用于代数式中的和差&…

等价无穷小替换及其习题 笔记

等价无穷小替换https://www.bilibili.com/video/BV1eU4y1F7W4/?spm_id_from333.788.recommend_more_video.1 幂函数等价无穷小替换尤为重要 下列基本公式及其定理&#xff1a; 在求极限x趋于0&#xff0c;洛必达前先看有没有等价无穷小替换的机会 推广形式&#xff1a; 注意…

高数常用等价无穷小

高数常用等价无穷小公式 图源网络常用公式泰勒公式快乐&#xff01; 图源网络 我强调一下&#xff0c;图片来自网络&#xff0c;我只负责用ps加工一下&#xff0c;得到没用重复的公式然后做成自己的工具&#xff0c;没有其他意思 常用公式 泰勒公式 快乐&#xff01;

微积分 | 常用等价无穷小的整理 | 清晰

当 x → 0 x\to 0 x→0 时 sin ⁡ x ∼ x tan ⁡ x ∼ x ln ⁡ ( 1 x ) ∼ x e x − 1 ∼ x arcsin ⁡ x ∼ x arctan ⁡ x ∼ x log ⁡ a ( 1 x ) ∼ x ln ⁡ x a x − 1 ∼ ln ⁡ a ⋅ x 1 − cos ⁡ x ∼ 1 2 x 2 ( 1 x ) n − 1 ∼ x n \begin{aligned} &\sin x\si…

math_证明常用等价无穷小泰勒展开案例代换

文章目录 等价无穷小和泰勒公式常用等价无穷小泰勒公式&等价无穷小求解极限 无穷小量无穷小量的比较无穷小的阶(相对阶)利用等价无穷小来计算极限(代换原则)等价无穷小充要条件 常用的等价无穷小和推导 sin ⁡ ( x ) ∼ x \sin(x)\sim x sin(x)∼x t a n ( x ) ∼ x tan(x)…

vue-router 路由的懒加载原理及方式

当打包构建应用时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&#xff0c;这样就更加高效了。 结合 Vue 的异步组件和 Webpack 的代码分割功能&#…

JPA/hibernate懒加载原理分析及JSON格式API反序列化时连环触发懒加载问题的解决

什么是懒加载 JPA是java持久层的API&#xff0c;也就是java官方提供的一个ORM框架&#xff0c;Spring data jpa是spring基于hibernate开发的一个JPA框架。Spring data jpa提供了大量的数据库操作接口&#xff0c;以及采用动态代理的方式做的以接口方法命名的数据库操作方式&…

react性能优化-懒加载原理

编译阶段的优化 开发阶段构建更快 loader的include和exclude属性 {test: /.(j|t)sx?$/,use: [{loader: "thread-loader",},{loader: "babel-loader",options: {presets: [["babel/preset-env", { modules: false }], //es6->es5"babe…

js图片懒加载原理、实现及节流优化

1.懒加载原理 在图片没有进入可视区域时&#xff0c;先给的src一个默认加载的图片&#xff0c;这样浏览器就不会发送请求了&#xff0c;等到图片进入可视区域再把真实的图片路径data-src给src。 2.具体实现 1. 效果 2. 代码如下&#xff1a; <style>.imgList{width:…

html图片懒加载,图片懒加载原理及实现

原理&#xff1a; 先将img标签的src链接设为同一张图片(比如空白图片)&#xff0c;然后给img标签设置自定义属性(比如 data-src),然后将真正的图片地址存储在data-src中&#xff0c;当JS监听到该图片元素进入可视窗口时&#xff0c;将自定义属性中的地址存储到src属性中。达到懒…

java懒加载的原理_每天使用 Spring 框架,那你知道 lazy-init 懒加载原理吗?

普通的bean的初始化是在容器启动初始化阶段执行的&#xff0c;而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。 Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始化…

mybatis -- 懒加载原理

目录 测试代码调试代码为什么BlogResp2是代理对象呢? 什么时候创建的代理对象呢? 让我们看一下源码懒加载的赋值流程懒加载失效的原因blogResp2的代理对象是如何构建lazyLoader属性的blogResp2的代理对象结构 测试代码 通过id 查询博客信息, 同时懒加载查询博客的所有评论信息…

js实现图片懒加载原理

有时候一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片多只之又多,页面图片多,加载的图片就多。服务器压力就会很大。不仅影响渲染速度还会浪费带宽。比如一个1M大小的图片,并发情况下,达到1000并发,即同时有1000个人访问,就会产生1个G的带宽。 为了解决…