行业知识
剖析【C++】——类与对象(中)——小白篇—超详解
目录
1.类的6个默认成员函数:
1. 默认构造函数(Default Constructor)
2. 析构函数(Destructor)
3. 拷贝构造函数(Copy Constructor)
4. 拷贝赋值运算符(Copy Assignment Operator)
5. 移动构造函数(Move Constructor)
2.构造函数详解
2.1 构造函数的概念
示例类:Date
2.2 构造函数的特性
示例代码:构造函数重载
使用构造函数
编译器生成的默认构造函数
C++11中的改进
总结
3.析构函数详解
3.1 析构函数的概念
示例类:Date
3.2 析构函数的特性
示例代码:编译器自动生成的析构函数
资源管理示例:Stack类
总结
4.拷贝构造函数详解
4.1 拷贝构造函数的概念
示例类:Date
4.2 拷贝构造函数的特征
浅拷贝与深拷贝
示例代码:浅拷贝与深拷贝
拷贝构造函数的典型调用场景
总结
5.赋值运算符重载详解
5.1 运算符重载概述
示例:运算符重载函数原型
5.2 赋值运算符重载
赋值运算符重载格式
示例类:Stack
赋值运算符重载的注意事项
前置++和后置++重载
示例代码:前置和后置自增运算符重载
总结
6.日期类的实现
1. 定义Date类
2. 详细解析每个部分
2.1 构造函数
2.2 拷贝构造函数
2.3 赋值运算符重载
2.4 析构函数
2.5 显示日期
7.深度剖析C++中的const成员函数
问题1: const对象可以调用非const成员函数吗?
问题2: 非const对象可以调用const成员函数吗?
问题3: const成员函数内可以调用其它的非const成员函数吗?
问题4: 非const成员函数内可以调用其它的const成员函数吗?
示例代码
解释
构造函数和成员变量
非const成员函数
const成员函数
非const成员函数调用const成员函数
const成员函数尝试调用非const成员函数
main函数示例
8.取地址及const取地址操作符重载
1. 取地址运算符(&)
2. const取地址运算符
示例代码
代码解释
运行示例
1.类的6个默认成员函数:
在C++中,即使一个类没有定义任何成员或成员函数,编译器仍会为其生成以下6个默认成员函数。下面是对这些默认成员函数的简易分析和代码示例。
1. 默认构造函数(Default Constructor)
默认构造函数在创建对象时被调用。如果类中没有定义任何构造函数,编译器会自动生成一个默认的无参构造函数。
class MyClass { // 编译器会生成一个默认构造函数};MyClass obj; // 调用默认构造函数 2. 析构函数(Destructor)
析构函数在对象被销毁时调用。编译器会生成一个默认的析构函数来清理资源。
class MyClass { // 编译器会生成一个默认析构函数};{ MyClass obj; // 析构函数在作用域结束时被调用} 3. 拷贝构造函数(Copy Constructor)
拷贝构造函数用于创建一个新的对象作为现有对象的副本。如果没有定义拷贝构造函数,编译器会生成一个默认的。
class MyClass { // 编译器会生成一个默认的拷贝构造函数};MyClass obj1;MyClass obj2 = obj1; // 调用默认拷贝构造函数 4. 拷贝赋值运算符(Copy Assignment Operator)
拷贝赋值运算符用于将一个对象的值赋给另一个对象。如果没有定义拷贝赋值运算符,编译器会生成一个默认的。
class MyClass { // 编译器会生成一个默认的拷贝赋值运算符};MyClass obj1;MyClass obj2;obj2 = obj1; // 调用默认拷贝赋值运算符 5. 移动构造函数(Move Constructor)
移动构造函数在C++11中引入,用于从一个临时对象中“偷取”资源。如果没有定义移动构造函数,编译器会生成一个默认的。
class MyClass { // 编译器会生成一个默认的移动构造函数};MyClass obj1;MyClass obj2 = std::move(obj1); // 调用默认移动构造函数 2.构造函数详解
构造函数是C++中的一个重要概念,它使对象在创建时自动初始化。以下是对构造函数的详细解释和代码示例,帮助初学者深入理解其原理和使用方法。
2.1 构造函数的概念
构造函数是一个特殊的成员函数,名字与类名相同。当创建类类型对象时,编译器会自动调用构造函数,以保证每个数据成员都有一个合适的初始值,并且在对象的整个生命周期内只调用一次。
示例类:Date
假设我们有一个 Date 类,需要在创建对象时设置日期信息。
class Date {public: Date(int year, int month, int day) { // 构造函数 _year = year; _month = month; _day = day; } void display() { std::cout