阿猫阿狗的爱情游戏2

 
// 案例5 阿猫阿狗的爱情游戏2
#include<iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>
using namespace std;
class Boy
{
	public:
	bool House; //有房;
	int Age; //年龄;
	char Name[20];
	public:
	Boy(char *name);
	bool Gift(char gift);
	int AnnualSalary(int salary);
};
Boy::Boy(char *name)
{
	srand((unsigned)time(NULL));		// 为rand()函数提供一个随机数种子
	if(rand() == 100) House=true;
	strcpy(Name,name);
}
bool Boy::Gift(char gift)
{
	if(gift=='Y'||gift=='y')
	return true;
	else
	return false;
}
int Boy::AnnualSalary(int salary)
{
	cout<<Name<<"日夜操劳,两眼发黑,为的是早日赚到老婆本。"<<endl;
	salary=salary*365;
	return salary;
}
class Girl
{
	public:
		int Feeling; // 情感指数
		bool Willing; // 是否愿意等
		int Birthday; // 生日
		char Name[20];
	public:
		Girl(char *name);
		void Love(char *name);
		void Marry(char *name);

};
Girl::Girl(char *name)
{
	strcpy(Name,name);
}
void Girl::Love(char *name)
{
	cout<<"\n 新的故事开始了,"<<Name<<"与"<<name<<"进入相恋阶段......"<<endl;
}
void Girl::Marry(char *name)
{
	cout<<"\n 大团圆结局,"<<Name<<"同意嫁给"<<name<<",从此两人过上了幸福生活......"<<endl;
}
/*
日期转换
参数 
	int day:距元月一日的天数
返回值:	
	表示日期中的月日
*/
int convertDate(int day)
{
	int days[]=
	{
		31,28,31,30,31,30,31,30,30,31,30,31
	};
	int i=0;
	for (; i<12; i++)
	{
		if (day>days[i])
		{
			day=day-days[i];
		}
		else
		{
			break;
		}
	}
	return ((i+1)*100+day);
}
int main( )
{
	Boy theBoy("dog");
	Girl theGirl("cat");
	theBoy.Age=24;
	theGirl.Feeling=1;
	theGirl.Willing=true;
	theGirl.Birthday=1001;
	int year=1;
	char gift='N';
	int money=0;
	int salary=0;
	theGirl.Love(theBoy.Name ); //故事开始
	if(theBoy.House == true)
	{
		theGirl.Marry(theBoy.Name);
		return 0;
	}
	while(theGirl.Willing==true)
	{
		cout<<"\n*****第"<<year<<"年*****\n";
		for( int day=1; day<=365; day++)
		{
			if( convertDate(day) == 214) // if ( 节日转换(day) == 情人节)
			{
				cout<<"情人节到了,是否给女朋友送礼物呢?(Y/N)";
				cin>>gift;
				if( theBoy.Gift(gift))
					theGirl.Feeling++;
				else
					theGirl.Feeling--;
			}
			if( convertDate(day) == theGirl.Birthday) //if ( 日期转换(day) == theGirl.Birthday)
			{
				cout<<"生日到了,是否给女朋友送礼物呢?(Y/N)";
				cin>>gift;
				if( theBoy.Gift(gift))
					theGirl.Feeling++;
				else
					theGirl.Feeling--;
			}
		}
		cout<<"请输入今年的日工资:";
		cin>>salary;
		money=money+theBoy.AnnualSalary(salary);
		cout<<"年终小结:\t"<<"男孩年龄:"<<theBoy.Age<<", 男孩存款:"<<money<<", 女孩情感指数:"<<theGirl.Feeling;
		if(money>1000000)
		{
			theBoy.House=true;
			break;
		}
		year++;
		theBoy.Age++;
		theGirl.Feeling--;
		if(theBoy.Age>30 || theGirl.Feeling<0) theGirl.Willing=false;
	}
	if(theBoy.House==true)
		theGirl.Marry(theBoy.Name);
	else
	{
		Boy anotherBoy("Mouse");
		theGirl.Love(anotherBoy.Name);
	}
	return 0;
}

多态的使用在面向对象编程中非常重要。它可以让我们以统一的方式使用不同类型的对象,并且在运行时根据实际对象的类型来调用相应的方法。引用中提到了编译时多态和运行时多态两种形式。 编译时多态是通过方法的重载实现的,即根据方法的参数列表的不同来区分不同的函数。这个在编译时就能确定下来,所以是静态的,而并不是真正意义上的多态。而运行时多态是通过动态绑定来实现的,也就是我们常说的多态性。在Java中,几乎所有的方法都是动态绑定的,也就是通过动态绑定来实现多态性。 多态的使用非常灵活,即便是在有多重继承的情况下,通过多态也能产生正确的行为。因为多态能够根据实际对象的类型来调用相应的方法,所以能够正确地处理对象之间的关系。这使得我们可以以一种一致的方式处理不同类型的对象,极大地简化了代码的编写和维护。 然而,也有一些特殊情况下不能使用多态。一个特例是当方法是私有的、静态的、final的、构造函数或者被标记为final类的方法时,它们不会被动态绑定,因此不能使用多态。这些情况下,方法的调用是根据引用变量的类型而不是实际对象的类型来决定的。所以在使用多态时需要注意这些特殊情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java多态的理解(java多态的理解和使用 - 阿猫阿狗)](https://blog.csdn.net/yetaodiao/article/details/127368861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [java基础-多态-多态的理解及使用](https://blog.csdn.net/weixin_41866473/article/details/111145983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值