【题目 16】拷贝构造函数的格式和作用,自动调用拷贝构造函数的几种情形?
格式:没有返回值 函数名和类名相同 参数:const person& 类型引用
作用:逐个给成员变量进行赋值三种情形下会调用拷贝构造函数
(1) 当用一个已有对象给另一个同类的对象进行初始化时 person a = b;
(2) 当一个函数的参数是一个类的对象时 void fun(person p); fun(a);
(3) 当一个函数的返回值是一个类的对象时 person fun(); person a = fun();
问题: 拷贝构造函数是值传递还是什么,为什么?
引用传递
因为使用值传递导致无限拷贝,进入死循环
person(const person other)//const person other = a;拷贝
{ }
person a;
person b = a;
【题目 17】深拷贝与浅拷贝的区别?
当类中有指针成员时,
1.浅拷贝只将指针中保存的地址复制给新的对象,实际上还是指的同一块内存,当析构函数对两个对象进行内 存释放时会出现 double free 异常(释放第一个对象时,已将内存删除,第二个对象释放时还是找的原有地址, 但内存已不存在)。
2.深拷贝拷贝时不拷贝地址,是将原对象指针中指向的内存进行拷贝,新对象指针存储新内存的地址,原对象指针存储原内存的地址,所以释放时互不干扰。 (系统默认的拷贝构造:浅拷贝)
【题目 18】友元的作用及特点?
当在类的外面想要使用该类的私有成员,可以通过友元来破坏封装性;
可以使用友元函数(在类外编写函数,在类内声明为友元函数)、友元类(声明一个类来访问另一个类中的私有成员)。
特点:友元不能继承,友元不能传递,友元是单向的。

【题目 19】设计模式--单例模式
作用:单例模式是保证程序中这个类只有一个实例对象;
什么情况下想到使用单例模式:有一个类的功能,多处都要使用,多次的创建与销毁。
实现方式:
1.构造函数和拷贝构造函数私有化,保证在类的外部不能创建和拷贝对象(0 例)