【05】构造析构,匿名对象,运算符重载

版权声明:zhuhurry 未经博主允许不得转载    https://blog.csdn.net/zhuhurry

一、构造函数
构造函数是一种特殊的成员函数,它的名字与类名相同。没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。
该类的对象被创建时,编译系统为对象分配内存空间,并自动调用该对象的构造函数---->构造函数负责成员的初始化工作。
固:构造函数的作用:初始化对象的数据成员
一个类可以有多个构造函数,可根据参数的个数和类型的不同来区别,即构造函数的重载,重载的规则与普通函数一样。
C++的构造函数可以分为4类。
1. 默认构造函数
也称为无参构造函数,如果创建了一个类 没有写任何构造函数,则系统会自动生成默认的无参构造函数 ,函数为空,什么都不做。但是如果我们写了构造函数,则系统就不会为我们生成这么一个默认的无参构造函数。如果希望有一个这样的无参构造函数,则需要自己显示地写出来

2. 一般构造函数
也称为重载构造函数,一个类可以有多个一般构造函数。如果想在构造函数之前给成员变量复制,而可用构造函数的 初始化列表 实现,如下
3. 复制(拷贝)构造函数
大多数情况下,我们不会去声明这个复制构造函数,而是C++系统为我们自动生成的一个复制构造函数,它的作用是将已存在的对象复制给另外一个对象。一般在下面的情况下使用复制构造函数。
①用复制的方法,建立新对象
②对象作为函数的参数时,会进行拷贝。(形参复制实参)
③对象作为函数返回值,函数结束后会复制一个临时对象,此时用的是复制构造函数
复制(拷贝)构造函数的四种调用场景(调用时机)
①定义并初始化场景
②定义并初始化场景--括号法
③实参初始化形参
④对象作为函数返回值

4. 转换构造函数(不重要)
(1)标准数据之间的转换
首先我们理解一下 标准数据类型之间的转换 ,在C++中,某些不同类型数据之间可以自动转换,例如:
int i = 6;
i = 7.5 + i;
编译系统对 7.5是作为double型数处理的,在求解表达式时,先将6转换成double型,然后与7.5相加,得到和为13.5,在向整型变量i赋值时,将13.5转换为整数13,然后赋给i。这种转换是由C++编译系统自动完成的,用户不需干预。这种转换称为 隐式类型转换
C++还提供 显式类型转换 ,其形式为:类型名(数据),如 int(89.5),将89.5转换为整型数89。
(2)转换构造函数
那些都是对于标准数据间的转换,而我们自己定义了类,我们想把对象转换成标准类型,或者把标准类型转换成类的对象、对象与对象之间的转换等等,需要通过转换构造函数的完成。
概念: 当一个构造函数只有一个参数,而且该参数又不是本类的const引用,这种构造函数称为转换构造函数

二、匿名对象
匿名对象可以理解为是一个临时对象,一般系统自动生成的
如你的函数返回一个对象,这个对象在返回时会生成一个临时对象

三、初始化列表
类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员;
2.进入构造函数后在构造函数中执行一般赋值与计算。
使用初始化列表有两个原因:
1.有三种情况必须使用初始化列表
①情况一、 需要初始化的数据成员是对象的情况
②情况二、 需要初始化const修饰的类成员或初始化引用成员数据
③情况三、 子类初始化父类的成员变量

2.效率高

四、析构函数
C++ 会自动的帮我们写一个析构函数。很多时候,自动生成的析构函数可以很好的工作,但是一些重要的事迹,就必须我们自己去写析构函数。
析构函数和构造函数是一对。构造函数用于创建对象,而析构函数是用来撤销对象。简单的说:一个对象出生的时候,使用构造函数,死掉的时候,使用析构函数。

像上面NoName类这样的设计,类中有一个成员变量是指针std::string *pstring,在构造函数中我们new了一个对象并用pstring来操作这个对象,那么在这样的情况下我们要设计下面这个的析构函数
注意: 析构函数不返回任何值,没有函数类型,也没有函数参数。因此它不能被重载。一个类可以有多个构造函数,但只能有一个析构函数。


五、操作符重载
运算符重载就是赋予已有的运算符多重含义。C++中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C++语言的扩充能力。用户自己自定义的类,如果需要使用=、==、>、<来完成类的复制、判断是否相等、比较大小功能,则需要用户自己定义关于这个操作符的具体的实现。
如何重载操作符?
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名


1. = 号重载 简单示例:
注意=左边的对象没被创建,调的不是=号重载函数,而调的是复制构造函数
2 .==操作符 重载

















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值