有以下程序:class Date{public:Date(int y, int m, int d); year = y; month = m; day = d;Date(

题目

有以下程序: 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 using nam

在下面程序的横线处填上______,使程序执行后的输出结果为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();

}


正确答案:friend Date
friend Date 解析:此题考查的是类与对象以及运算符的重载。题目中“+”重载函数的参数表中有两个参数,所以是作为友元函数重载,实现的功能是将参数对象中成员变量month、year进行相应对加。题中重载幽数的返回值类型是类Date,所以应填入“friend Date”。

第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


正确答案:B
解析:本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第一次是在执行语句Date dare3(datel);时,用已经建立的对象datel对正在建立的对象date3进行初始化;第二次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第三次是在执行fun函数中的返回语句return temp;时,系统初始化一个匿名对象时使用了拷贝构造函数。

第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)year4==0 && year100!=0llyear400=0(5)leap(y)(6)leap(dyear)

【解析】本题程序中对运算符进行重载。其中运算符+表示某日期加上若干天后的日期,第一个"-"表示某日期减去若干天后的日期,第二个"-"表示两日期相差的天数。

函数leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被4整除,但不能被100整除,或者既能被100整除,又能被400整除,所以(4)空应填入"year%4=0&year%100!=0"year%400==0"。

函数dton()将指定的日期转换成从000日起的天数,(5)(6)空用来判断当前的年份是否为闰年,调用函数leap(),所以分别填入"leap(y)"和"leap(dyear)"。函数ntod将指定的000日起的天数转换成对应的日期。

"+"运算符重载时,先将当前日期转换为从000日起的天数,再加上要加的天数,最后将天数再转换成对应的日期。所以(1)空应填入"dton(*this)+days"。

第一个"-"运算符重载时,先将当前日期转换为从000日起的天数,再减去要减的天数,最后将天数再转换成对应的日期。而天数的相减由语句"number-=days"完成,所以(2)空应填入"dton(*this)"。

第二个"-"运算符重载时,先将两个比较的日期都转换为从000日起的天数,再相减,所以(3)空应填入"dton(*this)-dton(b)-1"。

 

第4题:

在下面程序的画线处填上适当的内容,使程序执行后的输出结果为1/2005。 include usin

在下面程序的画线处填上适当的内容,使程序执行后的输出结果为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( );

}


正确答案:friend:Date Date
friend:Date Date 解析:因为重载函数后面有两个形参,“+”运算符是二元运算符,故将“+”运算符重载为友元函数,重载为友元函数的一般格式为:
niend函数类型operator运算符(形参表){函数体}

第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);


正确答案:B
解析:根据要求可知,在横线处是将类DATE中成员函数DateTime声明为类TIME的友元函数。由于函数DateTime是类DATE的成员函数,因此对DateTime函数的使用要加上“DATE::”修饰。其他各声明的组成部分可参照函数DateTime在类体外的定义实现。

第6题:

下列程序的运行结果是()。 include main() {stmct date {int year,month,day; }today;

下列程序的运行结果是( )。

#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


正确答案:B
解析:解答本题需要注意两个知识点:①结构体变量的长度是其内部成员长度的总和,本题中,struct date中包含year、month、day这3个整型变量,一个整型变量占2个字节:②sizeof是求所占字节数的运算符。

第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;


正确答案:(1)dton(*this)+days (2)dton(*this) (3)dton(*this)-(dton(b)-1 (4)year%4 == 0 && year%1O0! = 0‖year%400 =0 (5)leap(y) (6)leap(d.year)
(1)dton(*this)+days (2)dton(*this) (3)dton(*this)-(dton(b)-1 (4)year%4 == 0 && year%1O0! = 0‖year%400 =0 (5)leap(y) (6)leap(d.year) 解析:本题程序中对运算符进行重载。其中运算符+表示某日期加上若干天后的日期,第一个“-”表示某日期减去若干天后的日期,第二个“-”表示两日期相差的天数。
函数leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被4整除,但不能被100整除,或者既能被100整除,又能被400整除,所以(4)空应填入“year%4=0&&year%1001=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月 O日起的天数,再相减,所以(3)空应填入“dton(*this)-dton(b)-1”。

第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


正确答案:B
解析: 本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第一次是在执行语句Date date3(date1);时,用已经建立的对象date1对正在建立的对象date3进行初始化;第二次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第三次是在执行fun函数中的返回语句return temp时,系统初始化一个匿名对象时使用了拷贝构造函数。

第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;

}


正确答案:①int year month day; ②Date(){year=1;month=1;day=1;} ③year=y;month=m;day=d; ④coutyear"年"month"月"day"日"end1;
①int year, month, day; ②Date(){year=1;month=1;day=1;} ③year=y;month=m;day=d; ④coutyear"年"month"月"day"日"end1; 解析:这是一道综合应用题,主要考核类的定义。
①定义私有数据成员year、month和day分别用于表示年、月、日,它们都是血型的数据,所以在第1处填入:“int year, month, day;”。
②完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1。
根据以上要求可知,类Date的默认构造函数为:“Date(){year=1;month=1;day=1}:”。
③完成重载构造函数Date(int y, int m, int d)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值。其实也就是给私有成员year、month和day赋值。
所以在第3处应填入:“year=y;month=m;day=d;”。
④完成成员函数print的类定义,使其以“年-月-日”的格式将Date对象的值输出到屏幕上。函数print的功能是输出Date对象的值,此处主要考核C++的格式化输出。
所以在第4处应该填入:“coutyear"年"month"月"day"日"end1;”。

第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


参考答案:D

更多相关问题