c++类与对象

news2024/9/30 15:31:31

1.类的定义

在这里插入图片描述

2.类的构造函数

1.函数名与类名相同
2.无返回值
3.对象实例化时编译器会自己调用构造函数
4.构造函数可以重载
5.没有显示定义时,编译器会自动调用一个无参的默认构造函数,一旦写显示则不生成
6.对于内置类型构造函数不做处理,对于自定义类型则会处理。

在这里插入图片描述

3.析构函数

1.在对象销毁时会自动调用析构函数对对象中的资源进行清理和管理。
2.析构函数名是在类名前加~。
3.生命周期结束编译器会自动调用。
4.析构函数只有一个。

在这里插入图片描述

4.拷贝构造函数

1.拷贝构造函数是构造函数重载的一种形式。
在这里插入图片描述

2.若未定义拷贝构造则编译器会调用默认的拷贝构造,则为浅拷贝只是拷贝了大小。
3.浅拷贝只是拷贝了字节序,而空间不是独立的,在析构的时候容易出现一份空间被同时释放2次。

5.运算符重载

在c++针对自定义类型没法正常比较,而进行将运算符重载让自定义类型可以比较

定义一个日期类:

class Date

{

public:

	// 获取某年某月的天数

	int GetMonthDay(int year, int month) {
		int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
		if (month == 2) {
			if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
				monthday[month] = 29;
			}
		}
		return monthday[month];
	}
	
	// 全缺省的构造函数

	Date(int year = 1900, int month = 1, int day = 1) {

		_year = year;
		_month = month;
		_day = day;

	}
	void print() {
		cout << _year << "/" << _month << "/" << _day << endl;
	}

	// 拷贝构造函数

  // d2(d1)

	//Date(const Date& d);



	// 赋值运算符重载

  
	Date& operator=(const Date& d){
if(*this!=d){
_day=d._day;
_month=d._month;
_year=d._year;
}
}






	// 日期+=天数

	Date& operator+=(int day) {
		_day += day;
		while (_day > GetMonthDay(_year, _month)) {
			_day = _day - GetMonthDay(_year, _month);
			_month++;
			if (_month == 13) {
				_month = 1;
				_year++;
			}
		}
		return *this;
	}


	// 日期+天数

	Date operator+(int day) {
		Date temp(*this);
		temp+= day;
		return temp;
	}


	// 日期-天数

	Date operator-(int day) {
	
		Date temp(*this);
		temp -= day;
		return temp;
	
	}


	 日期-=天数

	Date& operator-=(int day) {
		_day -= day;
		while (_day <=0) {
		
			_month--;
			if (_month == 0) {
				_month = 12;
				_year--;
			}
			_day += GetMonthDay(_year, _month);
		}
		return *this;
	}


	// 前置++

	Date& operator++() {
		*this += 1;
		return *this;
	}

	 后置++

   Date operator++(int){
	   Date temp(*this);
	   temp += 1;
	   return temp;
   
   }


	 后置--

   Date operator--(int) {
	   Date temp(*this);
	   temp -= 1;
	   return temp;

   }


	 前置--
   Date& operator--() {
   *this -= 1;
   return *this;	

}


	// >运算符重载

   bool operator>(const Date& d) {
	   return !(*this <= d);
   }


	 ==运算符重载

   bool operator==(const Date& d) {
   
	   return _year == d._year && _month == d._month && _day == d._day;
   }


	 >=运算符重载

   bool operator >= (const Date& d) {
	   if (_year < d._year) {
		   return false;
	   }
	   else if (d._year == _year && _month < d._month) {
		   return false;
	   }
	   else if (d._year == _year && _month == d._month && _day < d._day) {
		   return false;
	   }
	   else {
		   return true;
	   }

	}



	 <运算符重载

	bool operator < (const Date& d){
		return !(*this >= d);
}

	 <=运算符重载

	bool operator <= (const Date& d){
		if (_year > d._year) {
			return false;
		}
		else if (d._year == _year && _month > d._month) {
			return false;
		}
		else if (d._year == _year && _month == d._month && _day > d._day) {
			return false;
		}
		else {
			return true;
		}

}

	 !=运算符重载

	bool operator != (const Date& d) {
	
		return !(*this == d);
	}


	 日期-日期 返回天数

   int operator-(const Date& d) {
	   Date d1 = *this;
	   Date d2 = d;
	   int flag = 1;
	   if (*this < d) {
		   d1 = d;
		   d2 = *this;
		   flag = -1;
	   }
	   int n = 0;
	   while (d1 != d2) {
		   ++d2;
		   ++n;
	   }
	   return n * flag;
   }

public:

	int _year;

	int _month;

	int _day;

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麒麟 arm架构安装nginx

目录 1、下载nginx安装包并解压 在线安装&#xff1a; 离线安装&#xff1a; 上传nginx安装包&#xff08;下载地址&#xff1a;https://nginx.org/download/nginx-1.20.2.tar.gz&#xff09;到指定目录 2、安装系统相关依赖软件、组件包 1、上传或者下载对应的组件包 2、安…

SQL 中的窗口函数

SQL 中的窗口函数&#xff08;Window Functions&#xff09;是一种特殊的函数&#xff0c;它可以在查询结果的某个区间内执行计算&#xff0c;而不仅仅是对单个行进行计算。 以下是一些常用的窗口函数&#xff1a; 1、ROW_NUMBER() ROW_NUMBER() 函数可以给查询结果的每一行…

C语言常见关键字

写在前面 这个博客是结合C语言深度解剖这本书和我以前学的知识综合而成的,我希望可以更见详细的谈一下C语言的关键字,内容有点多,有错误还请斧正. 常见关键字 下面我们说下C语言的关键字,所谓的关键字是指具有特定功能的单词,我们可以使用关键字来帮助我们完成不同的事物.C语…

win系统电脑如何打开sketch?

2 个方法快速使用 Windows 系统打开 Sketch 文件&#xff1a;使用 Adobe XD 打开 Sketch 文件或者使用浏览器中就能做设计的即时设计直接打开 Sketch 文件。众所周知&#xff0c; Sketch 只能在 Mac 电脑上使用&#xff0c;因此只有借助 XD 这种能在 Windows 系统启动的软件工具…

LSTM原理解析

一、背景 前文讲了RNN的基本原理&#xff0c;可以发现RNN是一个比较简单的神经网络结构&#xff0c;虽然为文本和时间序列的建模提供了一个很好的思路&#xff0c;但是也有一定的局限性。最直观的就是使用了Tanh函数造成梯度消失的问题。 根据Tanh的性质&#xff0c;很容易出…

树莓派Bullseye版本更新

1、参考链接&#xff1a;树莓派11bullseye换源/Opencv安装_所罗门大帝的博客-CSDN博客 2、参考链接&#xff1a;https://blog.csdn.net/weixin_39589455/article/details/124514099 步骤1、使用镜像帮助&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/ 步骤…

面试题 链表相交 -剑指offer简单

面试题 链表相交 题目链接 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#…

DIY生日蛋糕笔记

自制6寸生日蛋糕笔记 实验环境&#xff1a; 长帝CRTF32PD搪瓷烤箱32升&#xff0c; 九阳电动打蛋器&#xff0c; 裱花盘一套 蛋糕盒子 称重器 硅胶刀 两个大碗1号和2号。 材料&#xff1a; 参考&#xff1a; https://www.bilibili.com/video/BV1t34y1Z7mL/?spm_id_from333…

揭开苹果供应链,如何将其命运与中国深度捆绑

前 言 诺基亚在2007年时拥有9亿用户&#xff0c;在手机市场上占据主导地位&#xff0c;福布斯在当时以“谁能赶上手机之王&#xff1f;”为标题刊登了一篇关于该公司的报道&#xff0c;与此同时&#xff0c;苹果公司推出了iPhone系列产品。16年后&#xff0c;苹果公司以充足的…

如何解锁华为手机PIN/图案/指纹/人脸锁?

您的手机存储主要数据&#xff0c;因此为您的设备设置安全代码让您高枕无忧。屏幕和生物识别锁可在手机丢失时保护您的手机&#xff0c;并使其在被盗时无法访问。每次您需要密码来解锁手机时&#xff0c;但如果您被锁在密码之外怎么办&#xff1f; 今天的话题将独家帮助华为用…

ChatGPT引发的新一轮网络安全威胁,要如何应对?

近期随着美国ChatGPT横空出世&#xff0c;沉寂一时的人工智能领域再次掀起波澜&#xff0c;引起社会的广泛关注&#xff0c;仅在短短数月内&#xff0c;ChatGPT的注册用户就超过数亿。作为一款免费的聊天机器人&#xff0c;它几乎可以回答任何问题。和搜索引擎不同的是&#xf…

JavaSE 文件内容的读写

读文件和写文件有俩种风格的操作&#xff08;俩组不同的类&#xff09; 字节流 InputStream&#xff08;负责读&#xff09;/ OutputStream &#xff08;负责写&#xff09;~~针对二进制文件进行读写&#xff0c;操作基本单位是字节。字符流 Reader(负责读&#xff09;/ Write…

vue初识

第一次接触vue&#xff0c;前端的html,css,jquery,js学习也有段时间了&#xff0c;就照着B站的视频简单看了一些&#xff0c;了解了一些简单的用法&#xff0c;这边做一个记录。 官网 工具&#xff1a;使用VSCode以及Live Server插件&#xff08;能够实时预览&#xff09; 第…

【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

项目场景&#xff1a; 闲来无事&#xff0c;写了几个关于嵌入式技能大赛的任务。希望对大家有所帮助。本文开发板由百科荣创的龙芯1b开发板支持&#xff0c;关于嵌入式技能大赛的开发板。 LCD显示图片&文字&背景色&前景色小创语音控制lcd显示数码管倒计时LCD显示图…

创建自己的脚手架(一)

创建自己的脚手架 脚手架基本框架 使用pnpm init 创建环境 取一个自己喜欢的名字 这里叫gucli 生成 package.json文件的内容 {"name": "gucli","version": "1.0.0","description": "","main": "…

【JavaSE】Java9Java10Java11新特性(687~717)

687.复习&#xff1a;动态代理 688.复习&#xff1a;Lambda表达式 689.复习&#xff1a;函数式接口 690.复习&#xff1a;方法引用与构造器引用 691.复习&#xff1a;Stream API 692.复习&#xff1a;Optional类的使用 693.jdk版本更新说明 JDK 9 的发布 经过4次跳票&#x…

Leetcode力扣秋招刷题路-0074

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中&#xff0c;是否存在一个目标值。该矩阵具有如下特性&#xff1a; 每行中的整数从左到右按升序排列。 每行的第一个整数大于前…

《MySQL学习》 事务的隔离

一.快照读与当前读 众所周知,MySQL默认的隔离级别为可重复读&#xff08;RR&#xff09;&#xff0c;开启一致性视图后&#xff0c;事务提交前后数据都是不变的。 事务 T 启动的时候会创建一个视图 read-view&#xff0c;之后事务 T 执行期间&#xff0c;即使有其他事务修改了…

数值卡,让数据可视化玩出新花样丨三叠云

数值卡 路径 仪表盘 >> 仪表盘设计 功能简介 1. 数值卡增加「数值标题」、「图标」、「进度条」功能&#xff0c;使得应用场景更为广泛&#xff0c;实现数据可视化&#xff0c;让用户能够轻松地获取、处理信息。 2.「数据模型」支持0个维度1个指标、1个维度1个指标。…

EMC简介(文末有易灵思核心板)

EMC测试又叫做电磁兼容&#xff08;EMC&#xff09;&#xff0c;指的是对电子产品在电磁场方面干扰大小&#xff08;EMI&#xff09;和抗干扰能力&#xff08;EMS&#xff09;的综合评定&#xff0c;是产品质量最重要的指标之一&#xff0c;电磁兼容的测量由测试场地和测试仪器…