您的位置:首页 > 移动开发

第四次作业反馈及参考答案

2012-05-04 19:21 399 查看
声明:

1.很多同学都提交了cpp和exe文件,我希望剩下那部分只提交cpp文件的同学能够麻烦你一起提交exe文件,这样我就不用一遍一遍编译了,能够节省我不少时间啊,谢谢各位愿意合作的同学们了。

2.很多同学都有友好界面提示的习惯,在这里我要表扬一下一班的所有同学(好像基本都是女同学),特别细致,让我能够知道我应该输什么;而改着改着,突然黑屏了,我该输什么都不知道,各位程序猿总要为用户着想一下吧,为什么Apple能够如此成功,不应该归功于好到极致的用户体验么?这种现象居然是以班级为代表,我很纳闷啊。。

废话说完了,接下来是正题

第三次作业效果比我预期要低一点,这也难怪,大家第一次接触类的概念,就像我当年一样,理解了很久才明白类是做什么用的。

我在这里再强调几个概念:

简单来说,类就是对一个事物抽象出来的结果。比如人可以作为一个类。一般来说,一个类具有成员变量和成员方法。成员变量相当于属性,比如‘人’具有的变量有胳膊,手脚等。而成员方法是该类能完成的一些功能,比如‘人’可以说话(talk),行走(walk)等

对象,如果说类是一个抽象概念,那么对象就是具体对象。比如我们说‘人’就是一个抽象概念,但是具体到某个人,比如你,我,他,就是一个‘人’对象。

封装,简单理解就是把一系列的数据放在一个类中,还用前面的例子,如果形容一个人,我们可以用身高(hight),体重(weight)等来描述,如果不封装,我们需要3个变量来形容它。在面向对象中,可以用一个Person类封装这些数据,Person具有3个成员变量,分别是height,weight。使用的时候,每当生成一个这样的类的对象,就具有这3个属性。

继承,如果B类继承A类。那么B类将具有A类的所有方法,同时还可以扩展自己独有的方法和属性。还用人做例子。‘人’是父类,那么‘男人’,‘女人’都是继承自‘人’。也就是说,不论‘男人’,‘女人’,都具有‘身高’,‘体重’这两个属性,同时,他们可以有自己独有的属性,比如‘女人’可以有一个‘三围’属性-_-!


所以大家写类的时候,比如Time类,可以把next_second这个动作封装在Time类中作为Time的一个动作,而不是有些同学做的那样,在main函数里计算出时间

本次作业以理解类为主,同时我要补充几句:

1.我个人经验就是很少把成员变量声明成public作用域(这次老师要求的,我也不明白原因,我个人从来不会这样写),一般声明成public的都是static public形式的静态变量(具体原因google下,解释有很多)

2.尽管把函数写在类中,但是里面的函数尽量要简单,不要写多重循环嵌套的形式,比如if语句套上3层,这个不是一个好一贯,更重要的是,别人很有可能看不懂,一般的工程都是长期的,可能是你写完后离开这家公司了,由别人来维护,你这样的代码叫别人怎么看;再换个角度,如果你自己写的有逻辑问题,你自己愿意改自己的代码么?这里我希望同学们能够养成好习惯,写简单的语句,避免多重嵌套,复杂的地方加上注释。好的代码是一个会英语,但不会变成的人能够读得懂的。

#include <iostream>
#include<vector>
using namespace std;

class Time {
public:
//默认构造函数
Time()
{
cout<<endl;
cout<<"A new time instance has been created"<<endl;
year = 0;
month = 0;
day = 0;
hour = 0;
minute = 0;
second = 0;
}
//默认解析函数
~Time() {
cout<<endl;
cout<<"the instance has been destroyed."<<endl;
}

public:
int Year() const { return year; }
void Year(int val) { year = val; }

int Month() const { return month; }
void Month(int val) { month = val; }

int Day() const { return day; }
void Day(int val) { day = val; }

int Hour() const { return hour; }
void Hour(int val) { hour = val; }

int Minute() const { return minute; }
void Minute(int val) { minute = val; }

int Second() const { return second; }
void Second(int val) { second = val; }

//一般涉及到跟这个类有关的函数都会放在这个类里面作为这个类的函数
//const函数不能更改类里面的成员变量
//但是可以写一些local变量
void next_time() const
{
int	n_year = 0;
int n_month = 0;
int n_day = 0;
int n_hour = 0;
int n_minute = 0;
int n_second = 0;
//不提倡多重嵌套结构,别人看不懂
//进位制方式进行判断
if(second==59) {
n_second = 0;
n_minute++;
} else {
n_second = second + 1;
}

if (minute + n_minute > 59)
{
n_minute = 0;
n_hour++;
} else {
n_minute += minute;
}
if (hour + n_hour > 23) {
n_hour = 0;
n_day++;
}
else {
n_hour += hour;
}
//闰年
if ( month == 2 && (year % 4 == 0 && year % 100 != 0)
|| year % 400 ==0)
{
if (day + n_day > 29) {
n_day = 1;
n_month++;
}
else {
n_day += day;
}
} else if (month == 2)
{
if (day + n_day > 28) {
n_day = 1;
n_month++;
}
else {
n_day += day;
}
}

switch (month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12 :
if (day + n_day > 31) {
n_day = 1;
n_month++;
} else {
n_day += day;
}
break;
case 4: case 6: case 9: case 11:
if (day + n_day > 30) {
n_day = 1;
n_month++;
} else {
n_day += day;
}
br
4000
eak;
}

if (month + n_month > 12) {
n_month = 1;
n_year ++;
} else {
n_month += month;
}

n_year +=year;

cout<<n_year<<" year "<<n_month<<" month "
<<n_day<<" day "<<n_hour<<" hour "<<n_minute
<<" minute "<<n_second<<" second";
}
private:
int	year;
int month;
int day;
int hour;
int minute;
int second;
};

int main()
{
vector<int> time_vec;
cout<<"please input the time by follow order, year month day hour minute second,"
<<"separate each number with a space:";
int j;
for (int i = 0; i < 6; i++)
{
cin>>j;
time_vec.push_back(j);
}
Time my_time;//产生实例,不传参数时调用默认构造函数
my_time.Year(time_vec[0]);
my_time.Month(time_vec[1]);
my_time.Day(time_vec[2]);
my_time.Hour(time_vec[3]);
my_time.Minute(time_vec[4]);
my_time.Second(time_vec[5]);
cout<<endl;
my_time.next_time();
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息