IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [从菜鸟到大佬]第二篇C++类和对象(中) -> 正文阅读

[C++知识库][从菜鸟到大佬]第二篇C++类和对象(中)

类的六个默认成员函数

在这里插入图片描述
如果一个类什么都没有称之为空类,但是真的是什么都没有吗?其实并不是,每一个类都会有六个默认成员函数,即使你不写编译器也会成。

构造函数

概念:
构造函数是一个特殊的成员函数,名字与类名相同创建类对象时由编译器自动调用保证每个数据成员都有合适的初始值,并且在生命周期内只调用一次。
特性:
需要注意的是构造函数虽然叫构造,但是主要任务是初始化函数,并不具备开空间创建对象。
其特征如下:

  1. 与类名相同
  2. 无返回值
  3. 构造函数可以重载
  4. 实例化由编译器自动调用
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;

class Date
{
public:
	//构造函数无参
	Date()
	{

	}

	//带参构造函数
	Date(int year, int moth, int day)
	{
		_year = year;
		_moth = moth;
		_day = day;
	}
private:
	int _year;
	int _moth;
	int _day;
};

int main()
{
	//调用无参构造函数
	Date d1;//注意:调用无参构造函数不能带括号,不然编译器会认为是函数声明

	//调用带参构造函数
	Date d2(2021, 7, 2);

	return 0;
}

在这里插入图片描述

当我们没写构造函数,编译器就自动生成一个构造函数,编译器生成的构造函数有点奇怪,它对内置类型不处理,对自定义类型处理,这个处理也仅仅是调用自定义类型的构造函数。
注意:不管是自己写的无参、全缺省或编译器自己生成的都叫默认构造函数。

析构函数

概念:

析构函数: 它与构造函数恰恰相反它不是用于销毁対象的,局部对象的销毁是由编译器完成的,而在编译器销毁对象时,调用析构函数来完成资源的清理。

特性:

  1. 析构函数名是在类名前面加一个~
  2. 无返回值
  3. 析构函数只能有一个,如果未定义那么编译器会自动生成一个
  4. 当对象生命周期结束时,编译器会自动调用析构函数来清理

拷贝构造函数

拷贝构造:创建和构造函数一样,但是区别是拷贝构造形参只有一个参数(该形参是类类型对象的引用,一般是const修饰的引用)在用已存在的类类型对象创建新对象时由编译器自动调用。

特性:

  1. 构造拷贝也是一个特殊的默认成员函数
  2. 拷贝构造是构造函数的重载
  3. 拷贝构造必须传引用否则就会一直永无止境的递归调用

浅拷贝

一般我们用系统自己生成的拷贝构造都是值拷贝,按内存存储的字节序完成拷贝,这种拷贝我们称之为浅拷贝,或值拷贝。

赋值运算符重载

运算符重载

C++为了提高代码的可读性引入了运算符重载,运算重载是一个特殊的函数名的函数,也具有返回值和参数列表跟普通函数类似。

函数原形:返回类型 operator 要重载的运算符(参数列表)

注意:不能通过连接其它符号来创建新的操作符:比如 operator@

  1. 重载操作符必须有一个返回类型或者枚举类型的操作数
  2. 用于内置类型的操作符,起含义不能改变,列如:内置的整形+,不能改变其含义
  3. 作为类成员的重载函数时,其形参看起来比操作数数目少一成员函数的操作符有一个默认的形参this限定为第一个形参。
  4. .*、::、sizeof、?:、.注意这五个运算符不能重载。
    使用案列:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;

class Date
{
public:
	//构造函数无参
	Date()
	{

	}

	//带参构造函数
	Date(int year, int moth, int day)
	{
		_year = year;
		_moth = moth;
		_day = day;
	}
	
	int operator+(const Date& d)//运算符重载
	{
		_day += d._day;

		return _day;
	}


private:
	int _year;
	int _moth;
	int _day;
};

int main()
{
	//调用无参构造函数
	Date d1;//注意:调用无参构造函数不能带括号,不然编译器会认为是函数声明

	//调用带参构造函数
	Date d2(2021, 7, 2);
	int a = d1 + d2;//看着是d1+d2实际上编译器会把它转换为 int operator+(d1, d2);
}

在这里插入图片描述

赋值运算符重载

我们创建一个类的时候想要拷贝我们有拷贝构造,但是我们想要已创建的对象来拷贝呢?这时我们就得自己写一个赋值重载,但是赋值重载我们不写编译器也会自动生成,赋值重载也是一个默认成员函数。

使用案列:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;

class Date
{
public:
	//构造函数无参
	Date()
	{

	}

	//带参构造函数
	Date(int year, int moth, int day)
	{
		_year = year;
		_moth = moth;
		_day = day;
	}
	
	int operator+(const Date& d)//运算符重载
	{
		_day += d._day;

		return _day;
	}

	Date& operator=(const Date&d)
	{
		//这里的判断是防止自己给自己赋值
		if (this != &d)
		{
			_year = d._year;
			_moth = d._moth;
			_day = d._day;
		}
	}


private:
	int _year;
	int _moth;
	int _day;
};

int main()
{
	//调用无参构造函数
	Date d1;//注意:调用无参构造函数不能带括号,不然编译器会认为是函数声明

	//调用带参构造函数
	Date d2(2021, 7, 2);
	int a = d1 + d2;//看着是d1+d2实际上编译器会把它转换为 int operator+(d1, d2);

	d1 = d2;//这里的d1、d2和上面那一条的情况一样都会被编译器替换。

	return 0;
}

在这里插入图片描述

赋值运算符主要有几个特点:

  1. 参数类型
  2. 返回值
  3. 检测自己是否给自己赋值
  4. 返回*this
  5. 一个类如果没有显示定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的拷贝。

const成员

const修饰类的成员函数

const修饰的类成员函数称之为const成员函数,const修饰的成员函数,实际修饰改成员函数隐藏this指针,表明在该成员函数中不能对类的任何函数进行修改。

取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义,编译器默认生成的就够用了,只有特殊情况才需要重载,比如让别人获取到指定的内容。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:34:13  更:2021-07-30 12:34:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 8:47:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码