#include <iostream> using namespace std; /* 回顾上节的内容: 1.构造和析构 2.new delete 3.delete[] 新的知识 1.拷贝构造 ->构造函数 函数名和类名相同 没有返回值 定义: 用拷贝的方式构造对象 调用拷贝构造 参数为 该类对象的构造函数 关于引用: 1.拷贝构造 参数必须为引用 2.加引用 */ //========================================类函数====================================== class A { private: char *arr; // 指针 int x; public: A() // 参构造函数 没有返回值 自动调用 { cout << "调用无参构造函数" << endl; this->arr = NULL; // 给对象中的arr赋值 this->x = 0; } A(int x) { cout << "调用有参构造函数" << endl; this->arr = new char[x]; // 申请内存 this->x = x; } A(A & other) // 拷贝构造 { /** 参数是同类型的对象 other形参 -->相当是 sum shis指向当前对象相当于 (23)的fnu other拷贝的是sum --> 调用拷贝构造函数 所以必须加引用 拷贝 -->内容拷贝 直接用参数 定义一个新的形参 引用 取别名 不全定义新的形参 */ cout << "拷贝构造函数" << endl; this->arr = other.arr; this->x = other.x; } ~A() // 析构函数 --> 没有返回值 没有参数 自动调用 { cout << "调用析构函数" << endl; if (arr != NULL) { delete[]arr; // 释放内存 arr = NULL; } } void mamied(A other) { cout << "是否婚配" << endl; } }; /** new delete 申请对象的内存空间的时候 调用对象的构造/析构函数 delete[] 调用每个对象的析构函数 */ //==========================================新内容==================================== int main() { { A sum; // 定义一个对象sum 在栈区 (调用无参构造) A fnu(sum); // 调用拷贝构造 (23) sum.mamied(fnu); // 函数 传参 实参 -->形参赋值 形参拷贝实参 } getchar(); return 0; }