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

操作符重载

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

在这里插入图片描述

在这里插入图片描述

临时对象:typename();

<<的重载,看例子

在这里插入图片描述

ostream标准输出类;

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值