PTA-C++(构造函数与析构函数2)

本文介绍了C++中类的基础知识,包括构造函数和析构函数的作用及用法。通过实例展示了如何定义矩形类、点类,并讨论了学生排名表和体育俱乐部信息的管理。还涵盖了类的构造函数重载、析构函数的特性,以及如何在实际编程中应用这些概念。
摘要由CSDN通过智能技术生成

一、判断题

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值