C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载
C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载
构造函数与析构函数::
涉及构造函数还可以看这篇文章C++搞懂深拷贝初始化=与赋值=的区别
1、声明和定义构造函数和析构函数
构造函数在定义类对象时会自动被调用,在对象声明结束时析构会自动被调用
class name{private:int a,b;
public:name(int x,int y);//构造声明~name();//析构声明
}name::name(int x=0,int y=0):a(x),b(y){//构造定义}
name::~name(){//析构定义}
如果类里没有定义任何构造函数,name B;
表示C++编译器将调用默认无参构造函数;而且要求类里必须无任何构造函数,编译器才会调用默认存在的。
构造函数有有参有无参的,当仅有参构造函数存在时,若有参构造函数不存在默认参数,则定义对象时name B;
则会失败,因为不会调用编译器的默认无参构造函数。有参构造函数和函数一样(除了没有返回值)根据自己的想法定义;
析构函数一般和delete搭配使用,用来释放内存;析构函数没有参数;
只要类成员函数不改变调用对象就应该声明为const类型;
2、构造函数与赋值的一些使用
以下几种情况调用:
name TT=name(2,1);//1
TT = name(3,4);//2
1的使用可能有两种情况,不同编译器可能不同,第一种创建一个临时对象,把值赋给TT再析构,第二种创建TT对象;2只有一种情况创建临时对象赋值给TT,临时对象析构;
3、列表初始化
name TT={2,1};name TT{2,1};
参数与构造函数参数匹配;
4、this指针
一个指向类自己的指针,用来调用类成员或者方法;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhXKXuQR-1624432362592)(
5、对象数组
对象可以以数组的方式创建:
6、类作用域
侯捷C++总结:
注意:
1、:
:号后初始化时构造函数
独有的写法。侯捷:这是初始化,如果放入大括号里面,虽然参数也传了进去,但时间晚了些,效率也差了些。这个语法作用是初始化
2、默认参数
double r=0,double =0;0是默认参数,如果没有,则必须写默认无参构造函数,否则如果在初始化时无法调用默认无参构造函数,造成错误。也可以不写构造函数,编译器自动生成默认无参构造函数,
3、构造函数重载
构造函数可以重载overloding
,但下图不可以同时存在,complex c;
可以调用①也可以调用②,①与②冲突。
4、函数重载
函数重载
,只与形参类型和数量有关,与返回值无关看下图
可以把中间文件xxx.s打开查看,会发现,
5、构造函数位置
构造函数一般不放在private里,也有例外,比如下图
,放在private则不能被外界创建,
上图只存在一份A
6、const
class里的const,即成员函数后面加个const相当于const this(this指针),不允许改变class里的内容
7、参数传递值传递vs引用传递
参数传递值传递vs引用传递
,值传递需要开辟额外的栈内存,引用只需要开辟指针大小的栈内存即可
。尽量传参传引用,引用相当于变量的另一个名,笔者认为,值传递也有好用的地方,比如这个值变化会影响其他内容,如果不影响且不改变该变量值尽量引用,比如回溯算法里的递归,最终结果用引用,中间的一些变量用值传递。比如力扣
剑指 Offer 38. 字符串的排列
8、返回值传递,如果可以尽量返回引用。
9、友元,友元函数可以用私有数据
解决了我以前遇到的疑惑,讲的太细了。看下图:
10、什么情况下可以传引用(上面有讲)?什么情况下可以返回引用?
函数的操作结果放在已有内存位置还是新创建内存位置。如果函数操作结果放在本函数local位置,函数结束local被释放,则不能指针与引用。
操作符重载
临时对象:typename();
<<的重载,看例子
ostream标准输出类;
侯捷C++拷贝构造,拷贝赋值,析构
参考:《C++ prime plus》《C++ 程序设计语言》《侯捷C++面向对象高级开发》
C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载相关推荐
- 5. 三大函数:拷贝构造 拷贝赋值 析构函数
String 类 拷贝构造和拷贝赋值应该怎么写 只要类里面带指针,一定不要用编译器的默认拷贝构造函数,一定要自己写 三个特殊函数 String (const char* cstr = 0); //构造 ...
- C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;
可以取地址的是左值,左值在内存中不在寄存器:int a; char b; a,b 都是左值: 去不了地址的都是右值,右值不在内村中实在寄存器内部: int c= a+b ;"a+b&quo ...
- 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...
- 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝
目录 1.Destructor(析构函数) 在堆和栈(函数作用域与内嵌作用域)上分别创建Employee对象,观察析构函数的行为 2.Friend(友元) 1.为何需要友元 2.友元函数和友元类 3. ...
- 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)
之前实现了java的动态数组,试着写了个C++版的,同样对时间复杂度振荡进行了处理.纯手打,代码如下 : // // Created by PC-Saw on 2018/12/19. //#ifnde ...
- C++ 拷贝构造 与 赋值运算符重载
拷贝构造 当我们创建了一个对象时,想让它的内容和一个已经创建好的对象的内容相同,那么就必须用到拷贝构造.拷贝构造编译器也会自动生成,也是C++类中的6个默认函数之一. 拷贝构造函数格式类名(const ...
- C++之拷贝构造、拷贝赋值
拷贝构造 class Stu{public:int no;string name;int age; public:Stu(int no=10086, string name="jin&quo ...
- 默认拷贝构造函数 与 自定义拷贝构造函数
拷贝构造 有Person类如下: class Person {char* pName; public:Person(char* pN="noName"){cout<<& ...
- C++基础12-类和对象之操作符重载-string练习
总结: 1.等号操作符重载注意事项: (1)防止自身赋值 (2)先将自身的额外开辟的空间回收掉 (3)执行深拷贝 2.注意函数的返回引用或者元素:如果需要连续使用 返回元素 3 ...
最新文章
- Eclipse的java代码出错:The import org.apache cannot be resolved
- windows版本git的下载地址
- window.onload=function(){};
- 【java】java 1.8 之 supplier 理解
- mysql基础操作(二)
- saltstack returners
- 【Flask】from flask.ext.script import Manager
- 苹果Mac强大的网络流量分析工具:Debookee
- Atitit dubbo使用总结 attilax总结 艾龙 总结 1. 概念	1 1.1. Dubbo提供的注册中心有如下几种类型可供选择:	2 1.1.1. Multicast注册中心	2 1.1
- 【原创】技术员 Win10(32位)系统1709企业版 201711
- MybatisPlus官方文档
- JS实现页面保存为图片
- 微信小程序input标签详解
- 日历算法学习总结——公历
- 路由器硬件基础知识--MTU
- docker 部署jenkins + sonarqube + postgresql 代码扫描
- C/S系统快速开发框架/winform快速开发框架源码(C#+SQL)
- 广度优先搜索——动态类迷宫问题
- 【Web架构】静态站点生成器概述 Gatsby ,Hugo 和Jekyll对比
- 移动端页面布局方式,简单记录一下
热门文章
- Galaxy 生信平台(一):安装
- 宏基因组数据提交GSA指南
- MPB:扬州大学王梦芝组-​​反刍动物瘤胃原虫样品采集及计数方法
- oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
- R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案
- R语言plotly可视化:plotly可视化基本散点图(指定图像类型、模式)、plotly可视化散点图(为不同分组数据配置不同的色彩)、ggplotly使用plotly包呈现ggplot2的可视化结果
- R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
- pandas计算滑动窗口中的中位数实战(Rolling Median of a Pandas Column):计算单数据列滑动窗口中的中位数、计算多数据列滑动窗口中的中位数
- Python使用matplotlib绘图并去除颜色样条colorbar实战:remove colorbar from figure in matplotlib