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

struct构造函数 c++ (做到了一个题目,题目本身不重要,就是看到了大佬的代码,用了struct的神奇语法,这样一来代码十分简洁,看着舒服。) //待我学会了再来ಠ_ರೃ2021.2.7日晚 啊我好像会了QwQ 在struct内部写构造函数,实现struct初始化 可以定义无参数构造函数 或者是有参数的构造函数 如果定义了有参数的构造函数,那么在使用这个结构体的时候必须说明参数。 然后我刚刚试了一下,一个struct不能写两个参数表相同的构造函数 可以这样子写不一样的构造函数: 构造函数里面还可以写一些奇奇怪怪东西 初始化 阅读详情

C++之struct构造函数

(2010-10-19 15:04:47)
标签:

cpp

struct

构造函数

校园

分类: C/C_PlusPlus

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

     下面看看一道关于C++中笔试题:

// FileName:test.cpp

1:  #include <stdio.h>

2:  struct test
3:  {
4:       test(int n){
5:           printf("test(%d)/n",n);
6:       }

7:       test(){
8:           printf("test()/n");
9:         }

10:      void Fun(){

11:          printf("Fun()/n");
12:      }
13:  };

14:  int main()
15:  {
16:      test a(1);
17:      a.Fun();
18:      test b();
19:      b.Fun();
20:      return 0;
21:   }

    找出这个程序错误的一行?

    答案很简单就是第19行,往下看就知道为什么啦!

    结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。但是,C++的结构和类是有区别的:
1、结构的构造函数和类的构造函数不同。
   a.结构不能包含显式的无参数构造函数。结构成员讲自动初始化为它们的默认值。
   b.结构不能包含以下形式的初始值设定类:base(argument-list);
2、对于结构中的实例字段成员,不能在声明时赋值初始化。
3、声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new,如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
4、结构不支持继承,即一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。但是,结构从基类OBJECT继承。结构也可以实现接口。

    从编译角度来思考下:

摘自csdn: http://blog.youkuaiyun.com/fuadam/archive/2008/08/04/2766616.aspx

    最近才知道struct和class的静态构造函数的触发规则是不同的,不像class在第一次使用类的时候触发静态构造函数。如果只访问struct实例的字段是不会触发静态构造函数调用的。通过测试发现当访问静态字段,struct本身的函数(静态和实例)和带参数的构造函数就会引起静态构造函数的执行。而调用默认构造和未覆写的基类虚函数是不会的。为什么呢?
    让我们先来看看class和struct在调用构造函数时的区别。class使用newobj指令而struct使用initobj指令来构造对象。newobj在堆上申请一块内存并调用相应的构造函数进行初始化,然后将对象地址返回给计算栈。initobj则是从本地变量表中载入已经分配出来的struct实例然后初始化struct的各字段。这个初始化过程是CLR内部执行的,而不像class编译器会给class添加一个默认构造函数(这就是为什么struct不能给字段添加默认值的原因。但在类中如果给字段添加了默认值编译器就会自动在构造函数中添加字段赋值操作)。如果给struct中定义了一个有参数的构造函数,那么系统就不会使用initobj指令,而是直接用call指令调用带参数的构造函数。
    我们最常见最常用的调用函数的指令是call和callvirt。对于静态函数使用call指令,对于class使用callvirt指令(不论class中的函数是不是虚的)。只有子类调用父类的函数的时候(避免递归调用)以及构造函数中(由编译器添加保证父类字段被初始化)使用call指令。而对于struct我们发现只要调用的函数是struct本身定义的都是使用call指令。call和callvirt指令的差别在于,call会把调用的函数当作静态函数看待,而不会关心调用当前函数时实例指针(this)是否为空。这就是struct调用函数时为什么都是call因为struct实例是不可能被置为null的。实际上class在调用非虚函数时实际上也是使用call的只是多做了一步验证——this是否为空,让我们来验证一下。

C++结构体中无参数的默认构造函数 我们知道,C++类中当用户没有显示的声明构造函数时,编译器会自动生成一个无参数的默认构造函数 结构体除了成员访问权限外与类很相似,并且在学习一些库的代码时出现了这种写法,故作如下测试: #include<iostream> #include<vector> using namespace std; int main() { struct test{ double a; int b; vector<int> v; }; //未定义显示构造函数 //直 阅读详情

相关推荐

C++ struct扩展

目录 1、定义 2、继承 3、模板 在GNU C++标准库的源码中有大量的struct的应用,其用法看着跟class基本一样,显然C++对C中的struct做了扩展,这两者之间有啥区别了? 1、定义 struct一样支持访问控制,构造函数,析构函数,列表初始化语法,静态成员,内联函数,友元函数等,class支持的功能都可以用到struct上,两者最大的区别...

菜鸟进阶之路 1760

c++中struct构造函数

构造函数,说白了,就是初始化。 具体的打法是这个样子的: struct node{ //构造函数 node()//形参表 { //内容 } }; 例子: struct node{ node(int c) { x=c; y=z=0; } int x,y,z; }; ...

a_forever_dream的博客 4万+

Keil环境下单片机串口通信实战:如何用printf发送中文(附完整代码)

本文详细解析了在Keil开发环境下,单片机通过串口通信发送中文信息时产生乱码的根本原因及解决方案。核心在于理解并统一编码(如GB2312或UTF-8),并正确重定向printf函数。文章提供了针对STC89C52和STM32F103的完整代码示例,涵盖工程配置、编码设置、调试技巧,帮助开发者实现稳定可靠的中文串口输出。

weixin_29168675的博客 467

深入理解c++之struct构造函数

        是否曾好奇struct定义的数据结构类型,当我拷贝构造时,或者赋值操作时会发生什么?倘若我结构中存在指针引用对象时,又能否正确处理?带着这些疑问,我们来对struct的构造函数进行研究,以解答以下几个疑问:         1) 何时编译器会自动为struct合成构造函数         2) 如何能保证携带指针引用对象的struct正确拷贝或拷贝构造         让我们...

kwanson的博客 1万+

企业信息化系统的组成模块-核心业务系统

通过标准化的数据流形成完整的业务闭环,CRM生成的销售订单驱动ERP的生产和采购,ERP将生产计划传递给MES执行,MES报工数据返回ERP进行成本核算,ERP再将交付信息同步给CRM供客户查询。生产管理确保高效交付,缩短订单周期。某贸易公司实施ERP供应链模块后,库存周转率从每年4次提升到8次,库存资金占用从2000万降到1200万,释放800万现金流,同时缺货率从15%降到5%。│ │库存 │ │ MRP │ │ ERP │ │ 云ERP/ │ │。

weiyvyy的博客 695

VMware ubuntu虚拟机(或Centos7)与主机共享文件夹

系统环境 Windows 10 Vmware Workstation 15 Pro Ubuntu 20.04.1 LTS centos7 1.Ubuntu配置共享文件 1.1安装VMware-tools 更新最新VMware-tools组件 编辑->首选项->更新->立即下载所有组件 安装VMware-tools 虚拟机->安装VMware-tools 安装后ubuntu会加载一个虚拟光驱,解压文件,在解压的文件目录下执行以下命令进行安装 sudo vmware-instal

weixin_38924500的博客 2160

C++ 结构体(struct)最全详解

C++ 结构体(struct)最全详解

m0_60259116的博客 9538

Dify 第 4 篇 Dify 示例:数据库执行Agent

本文介绍了如何在Dify平台创建一个能够执行SQL查询的数据库Agent。通过安装并配置"通义千问"和"数据库"两个插件,实现自然语言到SQL语句的转换和执行。关键步骤包括:1)安装插件并配置API Key;2)设置默认数据库连接(建议使用只读账号);3)准备测试数据表结构。该Agent支持通过工具调用查询表结构、转换自然语言为SQL、执行查询并返回结果,同时提供了CSV查询和HTTP API接口功能。文中还提供了MySQL测试数据表的创建脚本和示例数据。

甘蓝的专栏 1157

C++之struct构造函数

C++之struct构造函数     在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。     下面看看一道关于C++中笔试题: // FileName:test.cpp 1:  #include 2:  struct test 3:  { 4:      

haiross的专栏 2万+

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 195

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

比较:C++的struct和class、C和C++的struct

C++中的struct结构体和C语言中的struct结构体差异较大。C++中的struct结构体和C++中的class类极为相似。

han2205277149的博客 3190

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 161

[C++]试一试结构体struct node的构造函数

完全不懂计算机原理的人举爪

2万+

无需Python环境!纯C#上位机+OpenCVSharp4+ONNX Runtime实现YOLOv8摄像头实时流检测,工业级稳定

摘要 工业自动化C#开发中,传统Python方案实现视觉检测功能存在环境依赖、内存泄漏和性能不稳定等问题。本文提出基于.NET 8+OpenCVSharp4+ONNX Runtime的纯C#方案,通过实际案例验证其优势: 零Python依赖,支持离线部署 内存稳定(380MB/72h),检测延迟<80ms 检测精度达漏检率<0.1%,误检率<0.5% 保留原有业务逻辑代码,3天完成适配 方案采用分层架构设计,支持多种硬件平台和操作系统,提供从模型导出到部署的全流程指导,为工业视觉检测提供高

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 196

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++ struct 初始化与赋值

变量的赋值和初始化是不一样的,初始化是在变量定义的时候完成的,是属于变量定义的一部分,赋值是在变量定义完成之后想改变变量值的时候所采取的操作。的方式进行初始化,使用指定初始化,一个明显的优点是成员初始化顺序和个数可变,并且扩展性好,比如在结构体非末尾处增加字段时,避免了传统顺序初始化带来的大量修改。初始化与赋值有着本质的区别,初始化是变量定义时的第一次赋值,赋值则是定义之后的值的变更操作,概念上不同,所以实现上也不一样。结构体变量的赋值是不能采用大括号的方式进行赋值的,例如下面的赋值是不允许的。

Doublelv 的博客专栏。 17万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++ class 和 struct 构造函数

1)、Class 在 C++ 中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。 构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;函数体中不能.

JACKSONMHLK的博客 5351

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

struct的构造函数

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

5058

《 C++ 点滴漫谈: 十 》揭秘 C++ struct 的潜力:内存布局、继承、优化,你都掌握了吗?

本文全面解析了 C++ 中的 struct 关键字,从其基本概念到高级应用,涵盖了 struct 的成员与访问控制、构造函数与析构函数、继承与多态,以及内存布局和现代 C++ 的特性扩展。此外,文章详细探讨了 struct 与 class 的异同、与 union 的对比,并剖析了常见的误区与陷阱。结合丰富的实际应用场景和实践建议,本文为开发者提供了深入理解和高效使用 struct 的指导。无论是初学者还是高级程序员,都可以从中获益,将 struct 转化为构建高效、灵活代码的重要工具。

Lenyiin 3425

C++之:struct和class的区别

C++中的struct和class的区别

qq_41920323的博客 5768

C++ struct constructor

下面看看一道关于C++中笔试题: // FileName:test.cpp 1:  #include 2:  struct test 3:  { 4:       test(int n){ 5:           printf("test(%d)\n",n); 6:       } 7:       test(){ 8:           printf("t

VergiL Wang的专栏 2215

C++ struct构造函数

    下面看看一道关于C++中笔试题:#include &lt;stdio.h&gt; struct test { test(int n){ printf("test(%d)\n",n); } test(){ printf("test()\n"); } void Fun(){ printf("Fun()...

fanx021的博客 9904

【C++】struct结构体/构造函数

#include <iostream> #include <string> #include <stdlib.h> using namespace std; struct node{ int data; string str; char x; //自己写的初始化函数 void init(int a, string b, char c){ this->data = a; this->str = b; this->x = c; }

Kinono的小屋 2096

C++中struct的用法

废话 struct是个很有用的东西呢! 进入正题 struct的用处是定义一个新的类型,而这个类型里面可以是各种各样的东西。 比如: struct node{//定义一个新的类型叫node int a; int b[110]; char c; double d; };//别忘了分号,毕竟这是个语句呢 当然这还是基本操作,其实里面还可以放一些更厉害的东西,就像这个! struct node...

a_forever_dream的博客 3万+

struct构造函数

在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。      下面看看一道关于C++中笔试题: // FileName:test.cpp 1:  #include 2:  struct test 3:  { 4:       test(int n){ 5:

qin2277411的专栏 1339
上一篇: DELPHI 通過窗口句柄或窗口标题得到进程句柄
下一篇: c++中实现delphi的按类名生成类对象
一剑平江湖
博客等级 码龄18年 207粉丝 1070原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值