下面程序设计了一个日期类如下,通过成员函数init来初始化,print输出
class Date{
int y,m,d;
void init(){
y=year; m=month; d=day;
}
void print(){
cout<<y<<" year "<<m<<" month "<<d<<" day"<<endl;
}
}
int main(){
Date d;
d.init();
d.print();
return 0;
}
问题2.根据上面修改的类,继续添加成员函数,要求能进行日期相减得到相差的天数,日期可以加上一个数,得到新的日期. 为简化程序,设每个月都是30天.
提示: 增加成员函数 int subDate( Date d){……}
Date addNum( int num){ …… }
在main函数中验证如下
Date d1,d2,d3; d1.init(1900,2,1); d2.init(1900,1,1);
cout<<d1.subDate(d2); //结果为30
d3 = d1.add(5);
d3.print(); //d1 是 1900,2,6
思考: addNum( int num)函数的返回值是否可以定义为void?即这样使用:
d1.add(5); d1.print( );
d1自身的日期加5,如果要这么做, addNum函数要如何修改?
提示:注意区分当前对象,如果需要返回当前对象自己,可以使用return *this;
this 是指向当前对象的指针,*this 表示当前对象
问题3. 修改前面的程序, 初始化一个错误的日期,如 Date d1; d1.init(1900,13,45);
程序可以运行么? 怎么修改程序保证程序不会输出一个错误的日期
提示: 如果初始化出错了后面的就没必要运行下去了,可以用函数exit(0)结束程序
通过这个例子程序思考对象的安全性,如何保证对象是正常的,能不能把日期的年月日开放给使用者等
2.3.2 实验内容 运算符重载
问题1:以下有类Point,请添加适当成员函数以便Point对象可以进行运算
class Point{
int x,y;
public:
void init( int a, int b){
x =a; y = b;
}
void disp(){
cout<<x<<” “<<y<<endl;
}
} ;
int main(){
Point a,b,c ;
a.init(1,2) ; b.init(3,4)
c = a + b ;
c.disp() ;
}
采用2种方式重载+运算符:成员函数和全局函数方式
提示:
成员函数方式 Point operator+(const Point& a)
全局函数方式 Point operator+(const Point& a,const Point& b)
那位大哥帮忙做下,明天中午之前要,谢谢了