有以下程序: class Date { public: Date(int y, int m, int d); year = y; month = m; day = d; Date(int y = 2000) year = y; month = 10; day = 1; Date(Date &d) { year = d.year; month = d.month; day = a.day; } void print() cout<<year<<"."<<month<<"."<<day<<end1; } private: int year, month,day; }; Date fun(Date d) Date temp; temp = d; return temp; } int main() { Date date 1 (2000,1,1),date2(0,0,0); Date date3(date 1); date2 = fun(date3); return 0; } 程序执行时,Date 类的拷贝构造函数被调用的次数是
A.2
B.3
C.4
D.5
第1题:
在下面程序的横线处填上______,使程序执行后的输出结果为1/2005。
include<iostream.h>
using namespace std;
class Date
{
Public:
Date(int m=1,int y=0): month(m),year(y){}
void Print(){cout<<month<<"/"<<year<<end1;}
______operator+(const Date&d1,const Date&d2);
private:
int month, year;
};
Date operator+(const Date&d1,const Date&d2)
{
int year,month;
year=d1.year+d2.year;
month=d1.month+d2.month;
year+=(month-1)/12;
month=(month-1)%12+1;
return Date(month,year);
}
void main()
{
Date d1(3,2004),d2,d3(10);
d2=d3+d1;
d2.Print();
}
第2题:
有以下程序:
class Date
{
public:
Date(int y,int m,int d);
{
year=y;
month=m
day=d;
}
Date(int y=2000)
{
year=y;
month=10;
day=1;
}
Date(Date &d)
{
year=d.year;
month=d.month;
day=d.day;
}
void print( )
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
private:
int year,month,day;
};
Date fun(Date d)
{
Date temp;
temp=d;
return temp;
}
int main( )
{
Date datel(2000,1,1),date2(0,0,0);
Date date3(datel);
date2=fun(date3);
return 0;
}
程序执行时,Date类的拷贝构造函数被调用的次数是
A.2
B.3
C.4
D.5
第3题:
●试题八
阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
在Date类中设计如下重载运算符函数:
Date operator+(int days):返回某日期加上天数得到的日期。
Date operator-(int days):返回某日期减去天数得到的日期。
int operator-(Date&b):返回两日期相差的天数。
【程序】
#include<iostream.h>
int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
∥day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date
{
int year,month,day;∥年,月,日
int leap(int);∥判断是否为闰年
int dton(Date&);
Date ntod(int);
public:
Date(){}
Date(int y,int mint d){year=y;month=m;day=d;}
void setday(intd){day=d;}
void setmonth(int m){month=m;}
void setyear(int y){year=y;}
int getday(){return day;}
int getmonth(){return month:}
int getyear(){return year;)
Date operator+(int days)∥+运算符重载函数
{
static Date date;
int number= (1) ;
date=ntod(number);
return date;
}
Date operator-(int days)∥-运算符重载函数
{
staffs Date date;
int number= (2) ;
number-=days;
date=ntod(number);
return date;
}
int operator-(Date &b)∥-运算符重载函数
{
int days= (3) ;
return days;
}
void disp()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
};
int Date::leap(int year)
{if( (4) )∥是闰年
return 1;∥不是闰年
else
return0:
}
int Date::dton(Date &d)∥求从公元0年0月0日到d日期的天数
{
inty,m,days=0;
for(y=1;y<=d.year;y++)
if( (5) )days+=366;∥闰年时加366天
else days+=365;∥非闰年时加365天
for(m=0;m<d.month-1;m++)
if( (6) )
days+=day_tab[1][m];
else
days+=day_tab[0][m];
days+=D.day;
return days;
}
Date Date::ntod(intn)∥将从公元0年0月0日的天数转换成日期
{
int y=1,m=1,d,rest=n,lp;
while (1)
{if(leap(y))
if(rest<=366)break;
else rest-=366;
else∥非闰年
if(rest=365)break;
else rest-=365;
y++;
}
y--;
Ip=Ieap(y);
while (1)
{
if(Ip)∥闰年
if(rest>day_tab[1][m-1])rest-=day_tab[1][m-1];
else break;
else∥非闰年
if(rest>day_tab[0][m-1])rest-=day_tab[0][m-1];
else break;
m++;
}
d=rest;
return Date(y;m,d);
}
void main()
{
Date now(2003,10,1),then(2005,6,5);
cout<<"now:";now.disp();
cout<<"then:";then.disp();
cout<<"相差天数:"<<(then-now)<<endl;
Date dl=now+1000,d2=now-1000;
cout<<"now+1000:";d1.disp();
cout<<"now-1000:":d2.disp();
}
●试题八
【答案】(1)dton(*this)+days(2)dton(*this)(3)dton(*this)-(dton(b)-1
(4)year%4==0 && year%100!=0llyear%400=0(5)leap(y)(6)leap(d.year)
【解析】本题程序中对运算符进行重载。其中运算符+表示某日期加上若干天后的日期,第一个"-"表示某日期减去若干天后的日期,第二个"-"表示两日期相差的天数。
函数leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被4整除,但不能被100整除,或者既能被100整除,又能被400整除,所以(4)空应填入"year%4=0&&year%100!=0"year%400==0"。
函数dton()将指定的日期转换成从0年0月0日起的天数,(5)、(6)空用来判断当前的年份是否为闰年,调用函数leap(),所以分别填入"leap(y)"和"leap(d.year)"。函数ntod将指定的0年0月0日起的天数转换成对应的日期。
"+"运算符重载时,先将当前日期转换为从0年0月0日起的天数,再加上要加的天数,最后将天数再转换成对应的日期。所以(1)空应填入"dton(*this)+days"。
第一个"-"运算符重载时,先将当前日期转换为从0年0月0日起的天数,再减去要减的天数,最后将天数再转换成对应的日期。而天数的相减由语句"number-=days"完成,所以(2)空应填入"dton(*this)"。
第二个"-"运算符重载时,先将两个比较的日期都转换为从0年0月0日起的天数,再相减,所以(3)空应填入"dton(*this)-dton(b)-1"。
第4题:
在下面程序的画线处填上适当的内容,使程序执行后的输出结果为1/2005。
include <iostream>
using namespace std;
class Date{
public:
Date(int m=1,int y=0):month(m),year(y){}
void Print( ){cout<<month<<"/"<<year<<endl;}
(9) operator+(const Date&dl,const Date& d2);
private:
int month,year;
};
(10) operator+(const Date& dl,const Date& d2){
int year,month;
year=d1.year+d2.year;
month=d1.month+d2.month;
year+=(month-1)/12;
month=(month-1)%12+1;
return Date(month,year);
}
void main( ){
Date dl(3,2004),d2,d3(10);
d2=d3+dl;
d2.Print( );
}
第5题:
为使下列程序的正确输出结果为: Now is 2004-7-6 12:12:12 那么应该在程序划线处填入的语句是( )。 #include <iostream> using namespace std; class TIME; class DATE { public: DATE(int y=2004,int m=1,int d=1) { year=y; month=m; day=d; } void DateTime(TIME &t); private: int year,month, day; }; class TIME { public: TIME(int h=0,int m=0,int s=0) { hour=h; minute=m; second=s; } ______________; //将类 DATE 中成员函数 DateTime 声明为类 TIME 的友元函数 private: int hour,minute, second; }; void DATE: :DateTime(TIME &t) { cout<<"Now is "<<year<<'-'<<month<<'-'<<day<< ' '<<t.hour<<":"<<t.minute<<': '<<t.seoond<<'.'<<end1; } int main ( ) { DATE d(2004,7,6); TIME t (12, 12, 12); d. DateTime (t); return 0; }
A.friend void DateTime(TIME &t);
B.friend void DATE::DateTime(TIME &0;
C.void DateTime(TIME &t);
D.friend void DateTime(TIME &t);
第6题:
下列程序的运行结果是( )。
#include<stdio.h>
main()
{stmct date
{int year,month,day;
}today;
primf("%d\n",sizeof(struct date));
}
A.8
B.6
C.10
D.12
第7题:
阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
【说明】
设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
在Date类中设计如下重载运算符函数:
Date operator + (int days) : 返回某日期加上天数得到的日期。
Date operator - (int days) : 返回某日期减去天数得到的日期。
int operator - (Date&b): 返回两日期相差的天数。
【程序】
include<iostream.h>
int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date
{
int year, month, day //年,月,日
int leap(int); //判断是否闰年
int dton(Date&)
Date ntod(int)
public:
Date() { }
Date (int y, int mint d) I year = y; month = m; day = d;}
void setday(intd){day = d;}
void setmonth(int m) {month = m;}
void setyear(int y) {year =y;}
int getday() {return day;}
int getmonth() {return month:}
int getyear() {return yea;}
Date operator + (int days) //+运算符重载函数
{
static Date date;
int number =(1)
date = ntod(number)
return date
}
Date operator - (int days) //-运算符重载函数
{
staffs Date date;
int number=(2);
number - = days;
date = ntod(number)
return date;
}
int operator - (Date &b) //-运算符重载函数
{
int days=(3);
return days;
}
void disp()
{
cout<<year<<"."<<month<<". "<<day<<endl;
}
};
int Date: :leap( int year)
if((4)) //是闰年
return 1; //不是闰年
else
return0:
}
int Date:: dton( Date &d) //求从公元0年0月0日到d日期的天数
{
inty,m,days =0;
for(y=1;y<=d. year;y++)
if((5))days+ =366; //闰年时加366天
else days + = 365; //非闰年时加365天
for(m =0;m<d. month-1;m++)
if((6))
days += day_tab[1] [m];
else
days +=day_tab[0] [m];
days + = d. day;
return days;
}
Date Date::ntod(intn) //将从元0年0月0日的天数转换成日期
{
int y=1,m = 1,d,rest = n,lp;
while(1)
{ if(leap(y))
if(rest<= 366) break;
else rest - = 366;
else //非闰年
if(rest = 365 ) break;
else rest-=365;
第8题:
有以下程序: Class Date { public: Date(int y,int m,mt d); { year=y; month=m; day=d; } Date(int y=2000) { year=y; month=10; day=1; } Date(Date &D) { year=d.year; month=d.month; day=d.day; } Void prin
A.2
B.3
C.4
D.5
第9题:
使用VC6打开考生文件夹下的工程MyProj1。此工程包含千个源程序文件 MyMainl.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成:
①定义私有数据成员year、month和day分别用于表示年、月、日,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。
②完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1, day=1,请在注释“//**2**”之后添加适当的语句。
③完成重载构造函数Date(int y, int m, int d)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释“//**3**”之后添加适当的语句。
④完成成员函数print的类外定义,使其以“年-月-日”的格式将Date对象的值输出到屏幕上。请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain1.cpp清单如下:
//MyMainl. cpp
include <iostream>
using namespace std;
class Date
{
public:
//* * 2 * *
Date(int y, int m, int d)
{
//* * 3 * *
}
void print() const;
private:
//data member
//* * 1 * *
};
void Date: :print () const
{
//* * 4 * *
}
int main ( )
{
Date national_day(1949,10,1);
national_day.print();
return 0;
}
第10题:
下列程序运行后的输出结果是( )。#include#includeusing namespace std;class Person{public:Person(string n):name(n) { cout<<'P'; }private:string name;};class Date{public:Date(int y=2012,int m=12,int d=21):year(y),month(m),day(d) { cout<<'D'; }
private:int year,month,day;};class Student:public Person{public:Student(string n,int y,int m,int d,char c):birthday(y,m,d),sex(c),Person(n) { cout<<'S'; }private:Date birthday;char sex;};int main(){Student stu1("Zhang",1990,10,1,'F');return 0}
A. S
B.PS
C.DPS
D.PDS