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被释放,则不能指针与引用。

操作符重载

可以看我的另一篇博客C++——运算符重载operator

临时对象:typename();

<<的重载,看例子

ostream标准输出类;

侯捷C++拷贝构造,拷贝赋值,析构

参考:《C++ prime plus》《C++ 程序设计语言》《侯捷C++面向对象高级开发》

C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载相关推荐

  1. 5. 三大函数:拷贝构造 拷贝赋值 析构函数

    String 类 拷贝构造和拷贝赋值应该怎么写 只要类里面带指针,一定不要用编译器的默认拷贝构造函数,一定要自己写 三个特殊函数 String (const char* cstr = 0); //构造 ...

  2. C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;

    可以取地址的是左值,左值在内存中不在寄存器:int a; char b; a,b 都是左值: 去不了地址的都是右值,右值不在内村中实在寄存器内部:  int c= a+b ;"a+b&quo ...

  3. 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...

  4. 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝

    目录 1.Destructor(析构函数) 在堆和栈(函数作用域与内嵌作用域)上分别创建Employee对象,观察析构函数的行为 2.Friend(友元) 1.为何需要友元 2.友元函数和友元类 3. ...

  5. 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)

    之前实现了java的动态数组,试着写了个C++版的,同样对时间复杂度振荡进行了处理.纯手打,代码如下 : // // Created by PC-Saw on 2018/12/19. //#ifnde ...

  6. C++ 拷贝构造 与 赋值运算符重载

    拷贝构造 当我们创建了一个对象时,想让它的内容和一个已经创建好的对象的内容相同,那么就必须用到拷贝构造.拷贝构造编译器也会自动生成,也是C++类中的6个默认函数之一. 拷贝构造函数格式类名(const ...

  7. C++之拷贝构造、拷贝赋值

    拷贝构造 class Stu{public:int no;string name;int age; public:Stu(int no=10086, string name="jin&quo ...

  8. 默认拷贝构造函数 与 自定义拷贝构造函数

    拷贝构造 有Person类如下: class Person {char* pName; public:Person(char* pN="noName"){cout<<& ...

  9. C++基础12-类和对象之操作符重载-string练习

    总结: 1.等号操作符重载注意事项:     (1)防止自身赋值     (2)先将自身的额外开辟的空间回收掉     (3)执行深拷贝 2.注意函数的返回引用或者元素:如果需要连续使用 返回元素 3 ...

最新文章

  1. Eclipse的java代码出错:The import org.apache cannot be resolved
  2. windows版本git的下载地址
  3. window.onload=function(){};
  4. 【java】java 1.8 之 supplier 理解
  5. mysql基础操作(二)
  6. saltstack returners
  7. 【Flask】from flask.ext.script import Manager
  8. 苹果Mac强大的网络流量分析工具:Debookee
  9. Atitit dubbo使用总结 attilax总结 艾龙 总结 1. 概念 1 1.1. Dubbo提供的注册中心有如下几种类型可供选择: 2 1.1.1. Multicast注册中心 2 1.1
  10. 【原创】技术员 Win10(32位)系统1709企业版 201711
  11. MybatisPlus官方文档
  12. JS实现页面保存为图片
  13. 微信小程序input标签详解
  14. 日历算法学习总结——公历
  15. 路由器硬件基础知识--MTU
  16. docker 部署jenkins + sonarqube + postgresql 代码扫描
  17. C/S系统快速开发框架/winform快速开发框架源码(C#+SQL)
  18. 广度优先搜索——动态类迷宫问题
  19. 【Web架构】静态站点生成器概述 Gatsby ,Hugo 和Jekyll对比
  20. 移动端页面布局方式,简单记录一下

热门文章

  1. Galaxy 生信平台(一):安装
  2. 宏基因组数据提交GSA指南
  3. MPB:扬州大学王梦芝组-​​反刍动物瘤胃原虫样品采集及计数方法
  4. oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...
  5. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
  6. R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案
  7. R语言plotly可视化:plotly可视化基本散点图(指定图像类型、模式)、plotly可视化散点图(为不同分组数据配置不同的色彩)、ggplotly使用plotly包呈现ggplot2的可视化结果
  8. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
  9. pandas计算滑动窗口中的中位数实战(Rolling Median of a Pandas Column):计算单数据列滑动窗口中的中位数、计算多数据列滑动窗口中的中位数
  10. Python使用matplotlib绘图并去除颜色样条colorbar实战:remove colorbar from figure in matplotlib