2022.6.26 C++——使用面向对象的思想实现栈和日期

23 篇文章 0 订阅
  1. 实现日期
//显示日期类
class Date
{
private:
	int year;
	int month;
	int day;
	bool tag;
	bool Is_Leap(int year)//判断是否为闰年
	{
		return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
	}
	int Get_YM_Day(int year, int month)
	{
		static int day[] = { 29,31,28,31,30,31,30,31,31,30,31,30,31 };
		                 //   0  1  2  3  4  5  6  7  8  9  10 11 12  
		if (month == 2 && Is_Leap(year))
		{
			month = 0;
		}
		return day[month];
	}
public:
	void Showdate() const
	{
		if (tag)
		{
			cout << "year: " << year << " month: " << month << " day:" << day << endl;
		}
		else
		{
			cout << "date is error" << endl;
		}
	}
public:
	Date(int y = 1, int m = 1,int d = 1):year(y),month(m),day(d),tag(true)
	{
		if (y < 1 || m < 1 || m>12 || d < 1 || d > Get_YM_Day(year,month))
		{
			tag = false;
		}
	}

};
int main()
{
	Date d1(2022, 2, 31); 
	d1.Showdate();
	Date d2(2022, 6, 26);
	d2.Showdate();

	return 0;
}

运行结果:
在这里插入图片描述
2. 实现栈

class Mystack
{
private:
	enum{STACK_INIT_SIZE=10,STACK_INC_SIZE=2};
	int* _data;//指向连续空间
	int _capa;//容量大小
	int _top;//栈顶指针,初始化为-1
public:
	Mystack() :_data(nullptr), _capa(STACK_INIT_SIZE), _top(-1)//缺省的构造函数
	{
		_data = new int[_capa];
	}
	Mystack(int sz) :_data(nullptr), _capa(sz), _top(-1)//带参的构造函数
	{
		_data = new int[_capa];
	}
	~Mystack()  //析构函数
	{
		delete[]_data;
		_data = nullptr;
		_capa = 0;
		_top = -1;
	}
	size_t Size()//元素个数
	{
		return _top + 1;//初始化给的是-1,因此当前_top+1
	}
	bool Empty()  //判空
	{
		//return _top == -1;
		return Size() == 0;
	}
	bool Full()  //判满
	{
		return Size() == _capa;
	}
	bool Push(int val) //入栈
	{
		if (Full())
		{
			return false;
		}
		else
		{
			_top = _top + 1;//_top++
			_data[_top] = val;
			//_data[++_top]=val;
			return true;
		}
	}
	int &Top()//取栈顶元素
	{
		return _data[_top];
	}
	const int& Top() const
	{
		return _data[_top];
	}
	bool Pop()//出栈
	{
		if (Empty())return false;
		_top = _top - 1;
		return true;
	}
	bool GetPop(int& val)//取栈顶和出栈一起
	{
		if (Empty())
		{
			return false;
		}
		else
		{
			val = _data[_top];
			_top -= 1;
			return true;
		}
	}
};
int main()
{
	Mystack mys;
	for (int i = 0; i < 10; ++i)//入栈
	{
		cout << "Push" << i << " " << mys.Push(i) << endl;
	}
	/*while (!mys.Empty())
	{
		int x = mys.Top();
		mys.Pop();
		cout << x << endl;
	}*/
	int val;
	while (mys.GetPop(val))
	{
		cout << val << endl;
	}

	return 0;

}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值