c++学习笔记第四天
2019-03-15 本文已影响12人
我就是一个垃圾
一、拷贝构造器
由己存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由拷贝构造
器来完成。拷贝构造器的格式是固定的
class 类名
{
类名(const 类名 & another)
拷贝构造体
}
class A
{
A(const A & another)
{}
}
规则:
1 系统提供默认的拷贝构造器。一经实现,不复存在。
2 系统提供的时等位拷贝,也就是所谓的浅浅的拷贝。
3 要实现深拷贝,必须要自定义。
深拷贝与浅拷贝
系统提供默认的拷贝构造器,一经定义不再提供。但系统提供的默认拷贝构造器是等位
拷贝,也就是通常意义上的浅拷贝。如果类中包含的数据元素全部在栈上,浅拷贝也可以满
足需求的。但如果堆上(*)的数据,则会发生多次析构行为,含有指针的成员
二、对象数组
和普通数组差别不大
三、类成员函数的存储方式
不占据类的存储空间,也并不像数据成员那样有多个对象就存在多份,只有一份函数
四、c++返回对象和引用的区别
栈对象是不可以返回引用的。
除非,函数的调用者返回自身对象
五、this指针
系统在创建对象时,默认生成的指向当前对象的指针。这样作的目的,就是为了带来方
便。
作用
1,避免构造器的入参与成员名相同。
2,基于 this 指针的自身引用还被广泛地应用于那些支持
多重串联调用的函数中。
比如连续赋值
六、赋值运算符重载
用一个己有对象,给另外一个己有对象赋值。两个对象均己创建结束后,发生的赋值行
为。
定义
类名
{
类名& operator=(const 类名& 源对象)
拷贝体
}
class A
{
A& operator=(const A& another)
{
//函数体
return *this;
}
};
规则
1 系统提供默认的赋值运算符重载,一经实现,不复存在。
2 系统提供的也是等位拷贝,也就浅拷贝,会造成内存泄漏,重析构。
3 要实现深深的赋值,必须自定义。
4 自定义面临的问题有三个:
1,自赋值
2,内存泄漏
3,重析构。
5 返回引用,且不能用 const 修饰。
a = b = c => (a+b) = c