c++之说_9_5|自定义类型 struct 构造函数

struct 很重要的东西之一

构造函数

struct A

{

public:

A(){};//无参构造函数  你不写 任何构造函数时 也是编译器默认会添加一个无参构造

A(int a){};//有参构造函数  

}

构造函数:

在实例一个对象时  都会使用(必须)一个构造函数 进行该对象的初始化工作

int main()

{

A a;//实例一个A类型名为 a 的对象变量  使用的是 无参构造函数

A a1(100);//实例一个A类型名为 a1 的对象变量  使用的是 有参构造函数 A(int a)

A* pa = new A();// 或者 new A  在堆空间 实例一个A类型对象变量并返回地址  使用的是 无参构造函数

A* pa1 = new A(100);//  在堆空间 实例一个A类型对象变量并返回地址  使用的是

有参构造函数  A(int a)

}

构造函数  也就是  定义变量时  调用的函数 通常我们在里面做 该类型变量的初始化工作

所以也就是说  你要定义这个类型的变量 必须有一个构造函数且是public 的  不然没有办法 去定义

struct A1

{

protected://注意!!!

A1(){};//无参构造函数  你不写 任何构造函数时 也是编译器默认会添加一个无参构造

A1(int a){};//有参构造函数  

public:

A1(const char* a){};

}

int main()

{

A1 a;//error 无法为该类型实例变量  因为 无参构造函数是 protected  外部无权访问

A1 a1(100);//error 无法为该类型实例变量  因为 有参构造函数是 protected  外部无权访问

A1* pa = new A1();// 或者 new A1  在堆空间  error 无法为该类型实例变量  因为 无参构造函数是 protected  外部无权访问

A1* pa1 = new A1(100);//  在堆空间 error 无法为该类型实例变量  因为 有参构造函数是 protected  外部无权访问

A1 a2(“OK”);//ok  定义栈空间变量

使用有参构造函数  A1(const char* a)

A1* pa2 = new A1(“OK”);//ok

在堆空间 实例一个A1类型对象变量并返回地址  使用的是 

有参构造函数  A1(const char* a)

}

现在有个问题  既然我们通常在构造函数内进行初始化工作  那么  我在构造函数里面 主动使用 return; 那么 是否创建了这个对象呢?还是说对象创建失败了?

struct A2

{

private:

int  a;

int  a2;

public:

A2(int b,int&c)

{

   a = b;

   return;

   a2 = c;

}

}

//main 函数中

A2 b(100,99);//b是否被创建了?

答案是  当然被创建了

只是 b 中的 a = 100  a2 = 0

初始化工作没完全完成而已  

这种对象  我们称为  不完全对象 

至于如何 避免这种情况  构造完全对象

那就得使用  二阶构造的概念

提示一下大家  

静态成员函数  变量 可以通过 

类型 :: 变量或函数   访问到

无需通过一个实例对象  (前提是  访问修饰符是public  否则外部无权访问)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

peer eslint-plugin-vue@“^7.0.0“ from @vue/eslint-config-standard@6.1.0

问题: 用vue/cli脚手架安装项目时,选择ESlint,再安装依赖包的时候,会报以下错误, 原因: npmV7 之前的版本遇到依赖冲突时,会忽视冲突,继续安装; npmV7版本开始不再自动忽…

java web servlet 学习系统进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web学习系统进度管理系统是一套完善的java web信息管理系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发,数据库为…

Java设计模式---单例 工厂 代理模式

Java单例模式详解 一、引言 单例模式是设计模式中的一种,属于创建型模式。在软件工程中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于那些需要频繁实例化然后引用,且创建新实例的开销较大的类&#xf…

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的,是同一个作用,但是有两个不同写法。 用法一: //注意:这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二: watch:{xxx:(newVal,oldVal)>…

NodeJS安装教程

1、 官网下载安装包 可以自己在官网下载 Node.Js中文网 https://nodejs.p2hp.com/ 2、安装步骤 1、双击安装包,一直点击下一步。 2、点击change按钮,更换到自己的指定安装位置,点击下一步(不修改默认位置也是可以的 &#xf…

Simulink|光伏并网逆变器低电压穿越仿真模型

目录 主要内容 模型研究 1.模型总览 2.boost模块 3.Inverter模块 4.控制模块 5.信号模块 结果一览 下载链接 主要内容 该模型为光伏逆变器低电压穿越仿真模型,采用boost加NPC拓扑结构,基于MATLAB/Simulink建模仿真。模型具备中点平衡…

openai assistants api接入微信机器人,实现类GPTs功能

chatgpt网址:https://chat.xutongbao.top 比普通gpt多了代码解释器功能,和上传训练数据文件的功能,这两个功能就是GPTs拥有的,而普通gpt没有拥有的

Linux系统Shell脚本 ----- 编程规范和变量详细解读

一、Shell脚本概述 1、什么是Shell Linux系统中运行的一种特殊程序在用户和内核之间充当“翻译官”用户登录Linux系统时,自动加载一个Shell程序Bash是Linux系统中默认使用的Shell程序 2、Shell的作用 Linux系统中的shell是一个特殊的应用程序,它介于操…

商城系统中30分钟未付款自动取消订单怎么实现(简单几种方法)

实现以上功能 方法1:定时任务批量执行 写一个定时任务,每隔 30分钟执行一次,列出所有超出时间范围得订单id的列表 AsyncScheduled(cron "20 20 1 * * ?")public void cancelOrder(){log.info("【取消订单任务开始】"…

HTTP/1.1、HTTP/2、HTTP/3 基本概述

参考链接 https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1-%E7%9B%B8%E6%AF%94-http-1-0-%E6%8F%90%E9%AB%98%E4%BA%86%E4%BB%80%E4%B9%88%E6%80%A7%E8%83%BD HTTP/1.1 HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的方式改善了 HTT…

Leetcode—25.K 个一组翻转链表【困难】

2023每日刷题(八十二) Leetcode—25.K 个一组翻转链表 算法思想 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

Conda python管理packages一 从入门到精通

Conda系列: 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

力扣每日一题 ---- 1970. 你能穿过矩阵的最后一天

这题对于没怎么做到过这题的朋友来说比较陌生,他给出的条件是两个都是动态的条件,一个条件随着另一个条件走,这个时候是很熟悉这题的朋友就会感觉比较麻烦,比较难,就不想写了,两个强相关条件的第一个是水每…

IT大侦“碳”:Concept Luna向循环设计持续演进

今天聊点轻松的话题。上个月,小编用来吃饭的家伙开始闹罢工,笔记本的触控和键盘突然没了反应,电脑虽然还能打开,但嗡嗡直叫的风扇让我意识到这件事并不简单。 你问我为什么电脑会出问题?好吧,那我得先搞清楚…

GBase 8s常见问题解析---追踪统计SQL执行情况 SQLTRACE

本文摘自GBASE南大通用社区,by:wty,原文请点击:GBase 8s常见问题 -- 追踪统计SQL执行情况 SQLTRACE|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商 问题现象 某些SQL执行慢、有问题…

C# HSLCommunication与物联网技术结合的可能性及在智能制造中的应用

引言: 随着物联网(IoT)技术的迅速发展,智能制造和工业互联网等领域对高效、稳定的通信技术需求日益增长。C# HSLCommunication库作为一种高效的通信工具,与物联网技术的结合为这些领域带来了新的可能性。本文将详细介绍…

【Java万花筒】缓存与存储:Java应用中的数据处理利器

激发性能之源:深度剖析Java开发中的五大数据缓存与存储方案 前言 在现代软件开发中,高效地处理和存储数据是至关重要的任务。本文将介绍一系列在Java应用中广泛使用的数据缓存与存储库,涵盖了Ehcache、Redisson、Apache Cassandra、Hazelca…

js触发input的打开文件选择器,将本地图片回显以及上传

js触发input的打开文件选择器,将本地图片回显以及上传 你可以通过以下 JavaScript 代码触发文件选择器:这里的场景不是通过input标签来触达的文件选择器,这样对于样式较为复杂的上传可以在html结构上保持清爽愉快,不用多添加一个i…

java web mvc-08-Grails 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

R语言【taxa】——is_*():检查对象是否为某个类

is_classification(x) 检查对象是否为 classification 类。 is_internode(x) 检查每个分类单元是否为节间。节间是指一个分类单元恰好有一个上级分类单元和 一个下级分类单元。这些分类群可以在不丢失它们之间的关系信息的情况下被移除。 x <- taxonomy(c(Carnivora, Felid…