C++ 学习记录 6

回顾:
1 初始化列表
类名(形参表):成员变量(初值),… { }
2 this指针
—》区分作用域
—》返回自引用
—》对象自销毁
—》作为实参,实现对象之间交互
3 常成员函数
1)void func(void) const { }
2)常函数中this是常指针,不能通过常函数直接修饰成员变量;但是被mutable关键字修饰的成员变量可以修改、
3)常对象只能调用常函数
4)函数名和参数表相同的成员函数,常版本和非常版本可以重载

4 析构函数(Destructor)
1)语法
~类名(void) { //负责清理对象的动态资源}
2)对象销毁时,析构函数将自动被调用
3)对象创建和销毁
创建:分配内存-》构造成员子对象-》执行构造函数的代码
销毁:执行析构函数代码-》析构成员子对象-》释放内存

今天:
十七 拷贝构造和拷贝赋值
1 浅拷贝和深拷贝//参考copy.png
1)如果类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝。
2)浅拷贝会导致不同对象之间的数据共享,如果数据在堆区,析构时还可能会引发"double free"的错误,导致进程终止,因为必须自己定义一个支持复制指针所指向内容的拷贝构造函数,即深拷贝。

2 拷贝赋值
1)当两个对象进行赋值操作时,比如"i3=i2",编译器会将其处理为“i3.operator=(i2)”成员函数调用形式,该函数被称为拷贝赋值操作符函数,其返回结果就是表达式结果。
2)如果类中没有定义拷贝赋值函数,那么编译器会提供缺省的拷贝赋值函数,但是缺省的拷贝赋值函数和缺省拷贝构造函数类似,也是浅拷贝,有内存泄漏和double free的问题,为了得到深拷贝的效果,避免问题,必须自己定义深拷贝赋值函数:
类名& operator=(const 类名& that){
if(&that != this){//防止自赋值
//释放旧内存
//分配新内存
//拷贝新数据
}
return *this;//返回自引用
}
注:that对应的右操作数,this指向的左操作数

十八 静态成员(static)
1 静态成员变量
语法
class 类名{
static 数据类型 变量名;//声明
};
数据类型 类名::变量名=初值;//定义和初始化

1)普通的成员变量属于对象,而静态成员变量不属于对象
2)普通成员变量在对象创建时,由构造函数完成定义和初始化,而静态成员变量需要在类的外部单独定义和初始化。
3)静态成员变量内存在数据段(全局区),可以把静态成员变量理解为被限制在类中使用的全局变量。

4)使用方法
类名::静态成员变量名;//推荐
对象.静态成员变量名;//和上面等价

2 静态成员函数
1)语法
class 类名{
static 返回类型 函数名(形参表){…}
};
2)静态成员函数没有this指针,也没有const属性
可以把静态成员函数理解为被限制在类中使用的全局函数

3)使用方法
类名::静态成员函数(实参表);//推荐
对象.静态成员函数(实参表);//和上面等价

注:在静态成员函数中只能访问静态成员,在非静态成员函数中既可以静态成员,也可以访问非静态成员.

3 单例模式
1)概念:一个类只能有唯一的对象,并提供它的访问方法
2)实现思路
—》禁止在类的外部创建对象:私有化构造函数
—》类的内部来维护唯一的对象:静态成员变量
—》提供单例对象的访问方法:静态成员函数
3)创建方式
—》饿汉式:单例对象无论用或不用,程序启动即创建
—》懒汉式:单例对象用时再创建,不用即销毁

十九 成员指针(了解)
1 成员变量指针
1)定义
类型 类名::*成员指针变量名 = &类名::成员变量:
2)使用
对象. *成员指针变量名;
注:“. *” 称为直接成员指针解引用操作符
对象指针–》*成员指针变量名;

2 成员函数指针
1)定义
返回类型(类名::*函数指针)(形参表)= &类名::成员函数名;
2)使用
(对象.*成员函数指针)(实参表)
(对象指针->*成员函数指针)(实参表)

二十 操作符重载
1 基本概念
操作符重载就是一些具有特殊名字的函数,使用operator关键字,接连某个符号,实现对该操作符运算规则的自定义,完成想要的运算规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值