当前位置: 首页 > news >正文

c++类和对象

类中成员变量的初始化

1.static的成员变量只能在类内声明,类外初始化不能使用缺省参数
在这里插入图片描述
对于共有的static变量:作用域是这个类中,而不是单单一个对象,所以在创建了两次后他会进行累加
共有的访问方式:对象.静态成员或者类::静态成员
非静态成员是不能这样访问的,只能使用对象进行访问
在这里插入图片描述

特别注意,对于private静态对象,是绝对不能访问的,只能写一个函数在类内进行返回
在这里插入图片描述
相应的也有静态的成员函数
在这里插入图片描述
静态成员函数只能调用静态成员变量

2.内置数据类型,如果没有缺省参数,也没有初始话,将会是任意值

内置数据类型:常见的类型:int,float,long以及各种类型的指针
对于自定义数据类型在初始化时,如果没有初始化,会调用自己的默认构造
在这里插入图片描述
3.对于自定义数据类型,在初始化的时候,会调用自己的默认构造函数

4.赋值会进行隐式类型转换

class Son
{
public:Son(){puts("默认构造");}Son(int a1){a = a1;}Son(Son& s){puts("拷贝构造");}
private:int a;
};int main()
{Son son1 = 1;const Son& son = 1;return 0;
}

分析
1.隐式类型转化中间会开一个空间,单独存储这个值,这个值有常性,又因为他的赋值时一个int,所以就可以发生隐式类型转换
2.如果想使用引用就必须要使用const进行修饰,给引用赋予常性

class Son
{
public:Son(){puts("默认构造");}Son(int a1){a = a1;}Son(const Son& s){puts("拷贝构造");}void print(){printf("%d\n", a);}
private:int a;
};
int main()
{Son son1 = (1,2);son1.print();return 0;
}

在这里插入图片描述
这种结果下为什么是2
因为这个是逗号表达式,最后的取值是2

class Son
{
public:Son(){puts("默认构造");}Son(int a1,int a2){a = a1;b = a2;}Son(Son& s){puts("拷贝构造");}void print(){printf("%d %d\n", a, b);}
private:int a;int b;
};
int main()
{Son son1 = { 1,2 };son1.print();return 0;
}

使用{}的形式也是可以进行类型转化的
在这里插入图片描述

Son s1(1);
Son s2=s1;//这种进行赋值的调用的是拷贝构造

在这里插入图片描述
于是这里就产生了一个新的问题拷贝构造能不能不使用&
答案是不能

如果写的不是&,传过去的时候需要调用拷贝构造,在调用拷贝构造的时候还需要调用拷贝构造,最终就会形成套娃的形式

在这里插入图片描述
5.编译器会对连续构造进行优化
当构造在同一句中才能进行优化
构造+构造->构造
构造+拷贝构造->构造
拷贝构造+拷贝构造->拷贝构造

特别提醒
拷贝构造一定要加const&
防止出现
这种是不会报错的,一旦写出来了,就很难发现错误

	Son(Son& s){s.a = this->a;}

相关文章:

  • 算法与数据结构之链表
  • Web前端—网页制作(以“学成在线”为例)
  • python- 学生信息管理系统
  • Go Gin中间件
  • 什么情况造成互斥锁死锁
  • 3.25每日一题(知线性常系数方程的特解求线性方程)
  • JDBC简单流程
  • Unreal PythonScriptPlugin
  • iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法
  • SpringBoot项目多环境开发
  • 4.3 传送门
  • 2024最新免费的mac电脑清理垃圾的软件有哪些?
  • 安装MySQL时出现 由于找不到 MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  • 【MATLAB】基于灰狼优化算法优化BP神经网络 (GWO-BP)的数据回归预测
  • 语音识别接口试用
  • php的引用
  • __proto__ 和 prototype的关系
  • 2019年如何成为全栈工程师?
  • Android开源项目规范总结
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Zeppelin在Apache Trafodion上的可视化
  • java第三方包学习之lombok
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Linux中的硬链接与软链接
  • python 装饰器(一)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Swift 中的尾递归和蹦床
  • tab.js分享及浏览器兼容性问题汇总
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • ionic入门之数据绑定显示-1
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #微信小程序:微信小程序常见的配置传值
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)获取字符编码的类
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)Windows2003安全设置/维护
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net语言中的StringBuilder:入门到精通
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @取消转义
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [2016.7.Test1] T1 三进制异或
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [CSS3备忘] transform animation 等
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理