作者主页: 作者主页
本篇博客专栏:C++
创作时间 :2024年6月25日
一、日期类
首先我们先来看一下通过类实现对日期的一系列处理,同时给大家说一下当中存在的一些细节问题:
1.1 GetMonthDay函数
这个函数的作用就是我们输入一个得到某一年某个月的天数,对后续的一些函数有着非常重要的作用,但我们要记得一个特殊情况,那就是闰年,因为闰年的二月是29天,非闰年是28天,注意这种情况就可以写代码了。
// 获取某年某月的天数
int GetMonthDay(int year, int month)
{
//日期数组
int MonthDayarr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//判断闰年
if (2 == month && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
{
return MonthDayarr[2] + 1;
}
else
{
return MonthDayarr[month];
}
}
这里我们要注意的点就是先判断是不是二月,不是二月我们就没有必要去判断是否是闰年了,没必要了就,这样会节省很多时间。
1.2日期类中的两种构造函数
全缺省构造:
拷贝构造:
1.3比较两个日期是否相等
1.3赋值运算符重载
1.4>和<运算符重载
1.5日期+天数与日期+=天数
1.6日期-天数与日期-=天数
1.7前置++与后置++
1.8前置--与后置--
二、const对象的调用
三、初始化列表
四、static成员
五、友元函数
比如说
Date d1;
cout << d1 << endl;
要实现这样的代码, 就只能重载 <<
友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在
类的内部声明,声明时需要加friend关键字
像这样:
这样就可以访问类中私有成员
六、友元类
七、内部类
八、拷贝对象的优化
编译器对拷贝构造的优化通常有以下几种方式:
我给大家看一个例子:
#include<iostream>
using namespace std;
class A
{
public:
A()
{
cout << "A()" << endl;
}
A(const A& a)
{
cout << "A(const A& a)" << endl;
}
~A()
{
cout << "~A()" << endl;
}
private:
int _a;
};
A func()
{
A a;
return a;
}
int main()
{
A tmp=func();
return 0;
}
大家认为这个例子共进行了多少次的拷贝构造和析构?
所以是两次构造,一次拷贝构造,一次赋值重载,三次析构。
如果我们换个方式接收呢
func改成这样:
A func()
{
return A();
}
A
int main()
{
A tmp=func();
return 0;
}
九、匿名对象
最后再来简单来说一下匿名对象,其实就是创建一个对象时不给他名字,
最后:
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.一个冷知识:
屏蔽力是一个人最顶级的能力,任何消耗你的人和事,多看一眼都是你的不对。
2.你不用变得很外向,内向挺好的,但需要你发言的时候,一定要勇敢。
正所谓:君子可内敛不可懦弱,面不公可起而论之。
3.成年人的世界,只筛选,不教育。
4.自律不是6点起床,7点准时学习,而是不管别人怎么说怎么看,你也会坚持去做,绝不打乱自己的节奏,是一种自我的恒心。
5.你开始炫耀自己,往往都是灾难的开始,就像老子在《道德经》里写到:光而不耀,静水流深。
最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!