【C++】构造函数和析构函数详解
个人主页 : zxctscl
(图片来源网络,侵删)
文章封面来自:艺术家–贤海林
如有转载请先通知
文章目录
- 1. 类的6个默认成员函数
- 2. 构造函数
- 2.1 概念
- 2.2 构造函数特性
- 2.2.1 语法特性
- 2.2.2 其他特性
- 3. 析构函数
- 3.1 概念
- 3.2 特性
- 4. 构造与析构顺序
1. 类的6个默认成员函数
如果一个类中什么成员都没有,简称为空类。
空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
(图片来源网络,侵删)重点关注前面四个。
2. 构造函数
在写栈或者队列时可能会忘记初始化,就会开始其他操作,所以c++就提出构造函数。
2.1 概念
对于以下Date类:
class Date { public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout Date d1; d1.Print(); Date d2(2024, 2, 23); d2.Print(); Date d3(2024); d3.Print(); return 0; } public: //无参构造函数 Date() { _year = 1; _month = 1; _day = 1; } //带参构造函数 Date(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout Date d1;// 调用无参构造函数 d1.Print(); Date d2(2024, 2, 23);// 调用带参的构造函数 d2.Print(); return 0; } public: Date(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void Print() { cout Date d3(2024); d3.Print(); return 0; } public: Date() { _year = 1; _month = 1; _day = 1; } Date(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void Print() { cout Date d1; d1.Print(); return 0; } public: void Print() { cout Date d1; d1.Print(); return 0; } public: Time() { cout private: // 基本类型(内置类型) int _year; int _month; int _day; // 自定义类型 Time _t; }; int main() { Date d; return 0; } public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout Date d1; d1.Print(); return 0; } public: Date() { _year = 1; _month = 1; _day = 1; } Date(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout Date d1; d1.Print(); return 0; } public: Date() { _year = 1; _month = 1; _day = 1; } Date(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout cout Date d2; } int main() { func(); Date d1; d1.Print(); return 0; } public: Date() { _year = 1; _month = 1; _day = 1; } Date(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout cout Date d2; } class Stack { public: Stack(size_t capacity = 3) { _array = (int*)malloc(sizeof(int) * capacity); if (NULL == _array) { perror("malloc申请空间失败!!!"); return; } _capacity = capacity; _size = 0; } void Push(int data) { // CheckCapacity(); _array[_size] = data; _size++; } bool Empty() { return _size == 0; } int Top() { return _array[_size - 1]; } void Pop() { //.. } ~Stack() { cout free(_array); _array = nullptr; } _size = _capacity = 0; } private: int* _array; int _capacity; int _size; }; int main() { func(); Date d1; d1.Print(); Stack st1; return 0; } public: ~Time() { cout private: // 基本类型(内置类型) int _year = 1970; int _month = 1; int _day = 1; // 自定义类型 Time _t; }; int main() { Date d; return 0; } public: Date(int year = 1) { _year = year; } ~Date() { cout Date d1(1); Date d2(2); return 0; } public: Date(int year = 1) { _year = year; } ~Date() { cout Date d3(3); static Date d4(4); } int main() { Date d1(1); Date d2(2); func(); return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...