一、判断题
1.C++程序中,类的构造函数名与类名相同。(T)
二、单选题
2-1
在下面类声明中,关于生成对象不正确的是( C)。
class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
};
A.point p(10,2);
B.point *p=new point(1,2);
C.point *p=new point[2];
D.point *p[2]={new point(1,2), new point(3,4)};
2-2
所有类都应该有:( C)
A.构造函数
B.析构函数
C.构造函数和析构函数
D.以上答案都不对
2-3
析构函数可以返回:(D)
A.指向某个类的指针
B.某个类的对象
C.状态信息表明对象是否被正确地析构
D.不可返回任何值
2-4
下列属于类的析构函数特征的是(A)
A.一个类中只能定义一个析构函数
B.析构函数名与类名不同
C.析构函数的定义只能在类体内
D.析构函数可以有一个或多个参数
2-5
建立一个类对象时,系统自动调用(A)
A.构造函数
B.析构函数
C.友元函数
D.成员函数
2-6
以下说法中正确的是( C)
A.一个类一定会有无参构造函数
B.构造函数的返回值类型是void
C.一个类只能定义一个析构函数,但可以定义多个构造函数
D.一个类只能定义一个构造函数,但可以定义多个析构函数
2-7
下列函数中,( C)不能重载。
A.成员函数
B.非成员函数
C.析构函数
D.构造函数
2-8
下列对重载函数的描述中,( A)是错误的。
A.重载函数中不允许使用默认参数
B.重载函数中编译根据参数表进行选择
C.不要使用重载函数来描述毫无相干的函数
D.构造函数重载将会给初始化带来多种方式
2-9
下列关于构造函数的描述中,错误的是(B)
A.构造函数名与类名相同
B.构造函数可以有返回值
C.构造函数可以重载
D.每个类都有构造函数
三、函数题
6-1 定义一个矩形类(C++构造函数)
分数 10
作者 张德慧
单位 西安邮电大学
设计一个名为Rectangle的矩形类,这个类包括:两个名为width和height的double数据域,它们分别表示矩形的宽和高。width和height的默认值都为1.该类包括矩形类的无参构造函数(默认构造函数);一个width和height为指定值的矩形构造函数;一个名为getArea( )的函数返回矩形的面积;一个名为getPerimeter( )的函数返回矩形的周长。请实现这个类。
类名为:
Rectangle
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include
using namespace std;
//你提交的代码将嵌入到这里
int main()
{
double m,n;
cin>>m;
cin>>n;
Rectangle a(m,n);
cout<<a.getArea()<<endl;
cout<<a.getPerimeter()<<endl;
return 0;
}
输入样例:
3.5 35.9
输出样例:
125.65
78.8
class Rectangle
{
private:
double width;//宽
double height;//高
public:
Rectangle()//无参构造函数
{
width=1;
height=1;
}
Rectangle(double x,double y)//有参构造函数
{
width=x;
height=y;
}
void set(double m,double n)
{
width=m;
height=n;
}
double getArea()//得到面积
{
double area;
area=width*height;
return area;
}
double getPerimeter()//得到周长
{
double perimeter;
perimeter=2*(width+height);
return perimeter;
}
};
6-2 Point类的声明和实现
分数 10
作者 李廷元
单位 中国民用航空飞行学院
定义一个Point类,代表平面上的一个点,其横坐标和纵坐标分别用x和y表示,设计Point类的成员函数,实现并测试这个类。
主函数中输入两个点的坐标,计算并输出了两点间的距离。请根据主函数实现Point类。
裁判测试程序样例:
#include
#include
#include
using namespace std;
//你的代码将被嵌在这里
int main()
{
Point p1, p2;
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
p1.setX(x1);
p1.setY(y1);
p2.setX(x2);
p2.setY(y2);
double x = p1.getX() - p2.getX();
double y = p1.getY() - p2.getY();
double len = sqrt(x * x + y * y);
cout << fixed << setprecision(2) << len << endl;
return 0;
}
输入样例:
0 0 3 3
输出样例:
4.24
class Point{
double x;
double y;
public:
void setX(double a)
{
x=a;
}
void setY(double b)
{
y=b;
}
double getX()
{
return x;
}
double getY()
{
return y;
}
};
6-3 学生排名表(析构函数)
分数 10
作者 何振峰
单位 福州大学
现在输入一批学生(人数大于0且不超过100)的名次和他们的姓名。要求按名次输出每个人的排名。
输入格式:每行为一个学生的信息,共两项,第一项为排名(为正整数,且任意两名学生的排名均不同),第二项为学生姓名。当输入-1时,表示输入结束。
输出格式:按名次输出学生姓名,每行一个。
函数接口定义:
main函数的一部分。
裁判测试程序样例:
#include
#include
using namespace std;
class Student{
int rank;
string name;
public:
int getRank(){return rank; }
Student(string name, int rank):name(name), rank(rank){ }
~Student(){ cout<<name<<endl;}
};
int main(){
int rank, count=0;
const int SIZE=100;
Student *pS[SIZE];
string name;
cin>>rank;
while(count<SIZE && rank>0){
cin>>name;
pS[count++]= new Student(name, rank);
cin>>rank;
}
/* 请在这里填写答案 */
return 0;
}
输入样例:
1 Jack
5 Peter
2 Alice
6 Kate
52 Mike
-1
输出样例:
Jack
Alice
Peter
Kate
Mike
for (int i = 0;i < count-1;i++) {
for (int j = 0;j < count - i-1;j++) {//冒泡排序
if (pS[j]->getRank() > pS[j + 1]->getRank()) {
Student* temp = pS[j];
pS[j] = pS[j + 1];
pS[j + 1] = temp;
}
}
}
for (int i = 0;i < count;i++) {
delete pS[i];
}
6-4 体育俱乐部I(构造函数)
分数 5
作者 何振峰
单位 福州大学
一个俱乐部需要保存它的简要信息,包括四项:名称(字符串),成立年份(整数),教练姓名(字符串)和教练胜率(0-100之间的整数)。用键盘输入这些信息后,把它们分两行输出:第一行输出名称和成立年份,第二行输出教练姓名和胜率。
裁判测试程序样例:
#include
#include
using namespace std;
class Coach{
string name;
int winRate;
public:
Coach(string n, int wr){
name=n; winRate=wr;
}
void show();
};
class Club{
string name;
Coach c;
int year;
public:
Club(string n1, int y, string n2, int wr);
void show();
};
int main(){
string n1, n2;
int year, winRate;
cin>>n1>>year>>n2>>winRate;
Club c(n1,year, n2, winRate);
c.show();
return 0;
}
/* 请在这里填写答案 */
输入样例:
Guanzhou 2006 Tom 92
输出样例:
Guanzhou 2006
Tom 92%
void Coach::show(){
cout<<name<<" "<<winRate<<"%"<<endl;
}
Club::Club(string n1,int y,string n2,int wr):c(n2,wr){//这里必须使用初始化列表的方法
name=n1;
year=y;
}
void Club::show()
{
cout<<name<<" "<<year<<endl;
c.show();
}