23级《面向对象程序设计》模拟测试

1-1-1 构造函数在创建类对象时自动调用执行。

T F

| 参考答案

答案 T

1-1-2 派生类对象不可以直接访问基类的私有成员。

T F

| 参考答案

答案 T

1-1-3 抽象类是指包含纯虚函数的类。

T F

| 参考答案

答案 T

1-1-4 类的析构函数可以重载。

T F

| 参考答案

答案 F

1-1-5 C++中所有的运算符都可以重载。

T F

| 参考答案

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 1/27

答案 F

1-1-6 拷贝构造函数的形参必须是本类对象的引用。

T F

| 参考答案

答案 T

1-1-7 使用new创建对象时必须指定初始值。

T F

| 参考答案

答案 F

1-1-8 内联函数就是定义在另一个函数体内部的函数。

T F

| 参考答案

答案 F

1-1-9 一个类的友元函数可以访问该类的私有成员。

T F

| 参考答案

答案 T

1-1-10 在类的静态成员函数内不能使用this指针。

T F

| 参考答案

答案 T

单选题 30 分

2-1 随机题目池 1 (10 选 10) 每题 1 分

2-1-1 ( )不是面向对象程序设计的主要特征。

A. 封装

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 2/27

B. 继承

C. 多态

D. 结构

| 参考答案

答案 D

2-1-2 C++的源文件的扩展名是_________。

A. h

B. obj

C. cpp

D. c++

| 参考答案

答案 C

2-1-3 下面有关内联函数的说法,错误的是__________。

A. 内联函数主要解决程序的运行效率问题

B. 内联函数调用机制跟普通函数不同

C. 内联函数中可以包括各种语句

D. 内联函数使用inline定义

| 参考答案

答案 C

2-1-4 已知int x =5;下列定义引用的方法中,_______是正确的。

A. int &y = 5;

B. int &y = x;

C. int y = &x;

D. int &y = &x;

| 参考答案

答案 B

2-1-5 关于C++类的说法,正确的是_________。

A. 只能有一个构造函数和一个析构函数

B. 可以有一个构造函数和多个析构函数

C. 可以有多个构造函数和一个析构函数

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 3/27

D. 可以有多个构造函数和多个析构函数

| 参考答案

答案 C

2-1-6 关于析构函数的说法,错误的是_________。

A. 析构函数由系统自动调用

B. 每个类都有析构函数

C. 析构函数在对象生命期结束时被调用

D. 析构函数可以重载

| 参考答案

答案 D

2-1-7 基类成员在派生类中的访问属性

基类中的公有成员在公有派生类中的访问属性为 ▁▁▁▁▁。

A. 私有 B. 保护 C. 公有 D. 无法访问

| 参考答案

答案 C

2-1-8 关于赋值兼容规则

赋值兼容规则是指在需要基类对象的任何地方, 都可以使用 ▁▁▁▁▁ 派生类的对象来替代。

A. 私有 B. 保护 C. 公有 D. 任何

| 参考答案

答案 C

2-1-9 下列关于虚函数的说法,错误的是___________。

A. 定义虚函数的关键字是virtual

B. 派生类可以重定义基类的虚函数

C. 构造函数可以定义为虚函数

D. 析构函数可以定义为虚函数

| 参考答案

答案 C

2-1-10 C++中的模板包括:

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 4/27

A. 对象模板和函数模板

B. 对象模板和类模板

C. 函数模板和类模板

D. 变量模板和对象模板

| 参考答案

答案 C

2-2 随机题目池 2 (10 选 10) 每题 2 分

2-2-1 有如下语句序列:  char str[10]; cin>>str;当从键盘输入"This is a program"时,str数组得到的字符串是

A. "This is a program"

B. "This is a"

C. "This"

D. "This is"

| 参考答案

答案 C

2-2-2 关于函数的默认参数

若有下面的函数声明

则 ▁▁▁▁▁ 是错误的语句。

A. F(); | 参考答案B. F(3);

C. F(, 5); D. F(6, 9);

答案 C

2-2-3 有如下函数模板定义: template T func(T x, T y) { return x>y?x:y; }在下列对func的调用中,错误的是(  )

A. func(3, 5);

B. func(3.0, 5.5);

C. func (3, 5.5);

D. func('a', 'b');

| 参考答案

void F(int x = 1, y = 2);

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 5/27

答案 C

2-2-4 下列有关类的说法不正确的是:

A. 对象是类的一个实例

B. 任何一个对象只能属于一个具体的类

C. 一个类只能有一个对象

D. 类与对象的关系和数据类型与变量的关系相似

| 参考答案

答案 C

2-2-5 在子类的成员函数中,可以直接访问的有_________ A. 父类的public或protected的成员

B. 父类的private或protected的成员

C. 只有父类的public的成员

D. 父类的public或private的成员

| 参考答案

答案 A

2-2-6 下列关于this指针的叙述中,正确的是( )

A. 任何与类相关的函数都有this指针

B. 类的成员函数都有this指针

C. 类的构造函数没有this指针

D. 类的非静态成员函数才有this指针

| 参考答案

答案 D

2-2-7 下列关于派生类构造函数和析构函数的说法中,错误的是()

A. 派生类的构造函数会隐含调用基类的构造函数

B. 如果基类中有默认构造函数,派生类可以不定义构造函数

C. 在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数

D. 在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数

| 参考答案

答案 D

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 6/27

2-2-8 以下说法正确的是()。

A. 在静态成员函数中可以调用同类的其他任何成员函数

B. const成员函数不能作用于非const对象

C. 在静态成员函数中不能使用this指针

D. 静态成员变量每个对象有各自的一份

| 参考答案

答案 C

2-2-9 下列关于运算符重载的描述中,错误的是()。

A. 运算符重载后,原来运算符操作不可再用

B. 运算符重载不改变优先级

C. 运算符重载函数的参数个数与重载方式有关

D. 运算符重载不改变结合性

| 参考答案

答案 A

2-2-10 关于纯虚函数和抽象类的描述中,( )是错误的。

A. 纯虚函数是一种特殊的虚函数,它没有具体的实现

B. 抽象类是指具有纯虚函数的类

C. 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类

D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

| 参考答案

答案 C

程序填空题 10 分

5-1 随机题目池 1 (2 选 2) 每题 5 分

5-1-1 下列程序定义了一个point的类,类中有私有数据成员x和y,公有的带参构造函数和print成员函数。dPoint函数的功能是将point对象的成员都*2。请根据测试输入输出,完善程序。

#include <iostream> using namespace std; class point{

double x,y; public:

point(double _x,double _y)

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 7/27

{

x=_x; y=_y;

}v oid print() {

cout<<x<<" "<<y<<endl;(1分)//输出x和y的值,用空格隔开}
f riend void dPoint(point &p);(1分)//将dPoint函数声明为point类的友元函数
};
void dPoint( point &p(1分))//将point对象的成员函数都乘以2

{

p.x*=2; p.y*=2;

}i nt main() {

double x,y; cin>>x>>y;

point p(x,y); dPoint(p); p.print(); return 0;(1分)//根据输入的x和y定义point对象p
(1分)//调用p的print输出p的成员

}

输入样例

1.1 2.2

输出样例

2.2 4.4

| 参考答案

填空#1 填空#2 填空#3 填空#4 填空#5cout<<x<<" "<<y<<endl;friend void dPoint(point &p);point &ppoint p(x,y);p.print();

5-1-2 下列程序定义了一个名为blog的类,有一个私有数据成员name。请根据测试样例,完善该类的普通构造函数,拷贝构造函数和=运算符重载的定义。

#include <iostream> using namespace std; class blog{

string name; public:

blog( string _name="" {name=_name;(1分)) //定义普通构造函数
cout<<"原创了名为<<"<<name<<">>的博文."<<endl;(1分)

}

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 8/27

blog(const blog &b)//定义拷贝构造函数{

name=b.name;

cout<<"拷贝了名为<<"<<name<<">>的博文."<<endl;(1分)}
c onst blog& operator=( const blog &b(1分) )//赋值运算符重载
{name=b.name;
cout<<"赋值获得了名为<<"<<name<<">>的博文."<<endl;(1分)

return *this; }

}; int main() {

string name; cin>>name; blog b1(name); blog b2=b1; blog b3; b3=b2;

return 0; }

输入样例:

敦重明辨

输出样例:

原创了名为<<敦重明辨>>的博文.拷贝了名为<<敦重明辨>>的博文.原创了名为<<>>的博文.

赋值获得了名为<<敦重明辨>>的博文.

| 参考答案

填空#1 填空#2 填空#3 填空#4 填空#5string _name=""cout<<"原创了名为<<"<<name<<">>的博文."<<endl;cout<<"拷贝了名为<<"<<name<<">>的博文."<<endl;const blog &bcout<<"赋值获得了名为<<"<<name<<">>的博文."<<endl;

函数题 50 分

6-1 随机题目池 1 (1 选 1) 每题 5 分

6-1-1 本题要求定义一个天气类Weather。类声明包含的成员如下: Weather包含3个私有数据成员:

天气描述 string description温度double temperature

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 9/27

湿度 int humidity

Weather包含2个共有成员函数: setWeather()设置天气信息displayWeather()显示当前天气信息

根据main函数和测试需求定义Weather类裁判测试程序样例:

输入样例:

输出样例:

| 教师提交

代码 编译器: GXX

#include <iostream> using namespace std;

class Weather{ string des; double tem;

int hu; public:

void setWeather(string _des,double _tem,int _hu) {

des=_des; tem=_tem;

hu=_hu; }v oid displayWeather() {

cout<<"Weather Description: "<<des<<endl; cout<<"Temperature: "<<tem<<"摄氏度"<<endl; cout<<"Humidity: "<<hu<<"%"<<endl;

} };

/* 请在这里填写答案 */

int main() {

// 创建一个Weather对象

Weather currentWeather;

// 设置天气信息

currentWeather.setWeather("小雨", 25.5, 45);

// 打印天气信息

currentWeather.displayWeather(); return 0;

}

Weather Description: 小雨Temperature: 25.5摄氏度Humidity: 45%

| 参考答案

答案 编译器: GXX

6-2 随机题目池 2 (1 选 1) 每题 5 分

6-2-1 请根据main函数及测试需求创建一个学校类。

裁判测试程序样例:

输入样例:

在这里给出一组输入。例如:

输出样例:

在这里给出相应的输出。例如:

| 教师提交

代码 编译器: GXX

class School{ public: School() {

cout<<"创建一个学校"<<endl;

}~ School() {

cout<<"撤销一个学校"<<endl;

} };

| 参考答案

答案 编译器: GXX

#include<iostream> using namespace std;

/* 请在这里填写答案 */

int main() {

// 创建一个学校对象,调用无参构造函数

School mySchool; return 0;

}

123456789

创建一个学校撤销一个学校

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 11/27

6-3 随机题目池 3 (1 选 1) 每题 5 分

6-3-1

根据main函数及输出样例写银行账户BankAccount类的定义

ownerName、accountId 和 balance 是私有数据成员,分别表示账户持有人的姓名、账户ID和账户余额。

getOwnerName、getAccountId 和 getBalance 是公共成员函数,用于获取账户的相关信息。

deposit 方法用于向账户中存款,只有当存款金额大于0时才会执行存款操作。withdraw 方法用于从账户中取款,只有当取款金额大于0且账户余额充足时才会执行取款操作。

displayAccountInfo 方法用于显示账户的详细信息。

裁判测试程序样例:

输入样例1:

输出样例1:

#include<iostream> #include<string> using namespace std;

/* 请在这里填写答案 */

int main() {

// 创建一个银行账户对象,使用构造函数初始化

BankAccount account("John Doe", 12345, 1000.00); double a;

cin>>a; double b; cin>>b;

// 显示账户信息

account.displayAccountInfo();

// 进行存款操作

account.deposit(a);

// 进行取款操作

account.withdraw(b);

// 再次显示账户信息

account.displayAccountInfo(); return 0;

}

Bank account created for John Doe with account ID 12345

Account ID: 12345, Owner: John Doe, Balance: 1000

Deposited 1 to the account of John Doe. New balance is 1001

输入样例2:

输出样例2:

输入样例3:

输出样例3:

| 教师提交

代码 编译器: GXX

class BankAccount {

string name; int id;

double balance; public:

BankAccount(string _name,int _id,double _balance) {

name=_name; id=_id; balance=_balance;

cout<<"Bank account created for "<<name<<" with account ID " <<id<<endl;

}v oid displayAccountInfo() {

cout<<"Account ID: "<<id<<", Owner: "<<name<<", Balance: " <<balance<<endl;

}

Withdrew 998 from the account of John Doe. Remaining balance is 3

Account ID: 12345, Owner: John Doe, Balance: 3

11 500

Bank account created for John Doe with account ID 12345

Account ID: 12345, Owner: John Doe, Balance: 1000

Deposited 1 to the account of John Doe. New balance is 1001

Invalid or insufficient funds for withdrawal

Account ID: 12345, Owner: John Doe, Balance: 1001

-3

1200

Bank account created for John Doe with account ID 12345 Account ID: 12345, Owner: John Doe, Balance: 1000 Invalid deposit amount

Invalid or insufficient funds for withdrawal

Account ID: 12345, Owner: John Doe, Balance: 1000

void deposit(double a) {

if(a<0) {

cout<<"Invalid deposit amount"<<endl; return;

}b alance+=a;

cout<<"Deposited "<<a<<" to the account of "<<name<<". New balance is "<<balance<<endl;

}v oid withdraw(double b) {

if(b>balance) {

cout<<"Invalid or insufficient funds for withdrawal"<<endl; return ;

}b alance-=b;

cout<<"Withdrew "<<b<<" from the account of "<<name<<". Remaining balance is "<<balance<<endl;

} };

| 参考答案

答案 编译器: GXX

6-4 随机题目池 4 (1 选 1) 每题 10 分

6-4-1

已有责任老师类Teacher的部分代码如下:

请补充完整责任老师类Teacher的函数定义,并编写实验室类Laboratory的代码,使之得出样例的输出结果。实验室类Laboratory中包含楼栋名称、课室编号、以及责任老师三个数据成员。

裁判测试程序样例:

//责任老师类

class Teacher{ private:

string m_name; //姓名

string m_phone; //联系方式public:

Teacher(string name, string phone); ~Teacher();

void show() const; };

#include <iostream> #include <string> using namespace std;

输入样例:

本例没有输入。

输出样例:

在这里给出相应的输出。例如:

| 教师提交

代码 编译器: GXX

Teacher::Teacher(string name, string phone) {

m_name=name; m_phone=phone; cout<<"创建责任老师"<<endl;

}T eacher::~Teacher() {

cout<<"撤销责任老师"<<endl;

//责任老师类

class Teacher{ private:

string m_name; //姓名

string m_phone; //联系方式public:

Teacher(string name, string phone); ~Teacher();

void show() const; };

/* 请在这里填写答案 */

int main() {

Laboratory lab("实训楼",304,"ZhangSan","13612345678"); cout<<"楼栋名称: "<<lab.getNameBuilding()<<endl; cout<<"课室编号: "<<lab.getIdRoom()<<endl; lab.getTeacher().show();

return 0; }

创建责任老师创建实验室

楼栋名称: 科技楼

课室编号: 305

责任老师姓名: zhang联系方式 : 13435

撤销责任老师撤销实验室撤销责任老师

}v oid Teacher::show() const {

cout<<"责任老师姓名: "<<m_name<<endl;

cout<<"联系方式 : "<<m_phone<<endl; }c lass Laboratory

{

string l_name; int l_id;

Teacher t; public:

Laboratory(string bname,int id, string tname, string pn):t(tname,pn)

{

l_name=bname; l_id=id;

cout<<"创建实验室"<<endl; }s tring getNameBuilding() {

return l_name; }

int getIdRoom() {

return l_id; }T eacher getTeacher() {

return t;

} ~Laboratory() {

cout<<"撤销实验室"<<endl;

} };

| 参考答案

答案 编译器: GXX

6-5 随机题目池 5 (1 选 1) 每题 10 分

6-5-1 已知两个类的部分代码如下,请补全Person类的函数定义,并完成Student类的代码编写,使之实现样例的结果。

函数接口定义:

//Person类

class Person{

string m_name; //姓名public:

Person(string name = "");//构造函数string getName(); //返回姓名

void show(); //显示姓名

};

裁判测试程序样例:

//Student类

class Student:public Person{ private:

int m_id; //学号

double m_a, m_b, m_c; //三门课成绩double m_Avg; //平均成绩

public:

Student(string name = "", int id = ' ', double a = 0,double b = 0,double c = 0);//构造函数

void show(); //显示姓名、学号、三门课成绩、平均成绩 (要求输出时保留两位小数)

double getAvg();//返回平均成绩};

#include <iostream> #include<string> #include<iomanip> using namespace std;

//Person类

class Person{

string m_name; //姓名public:

Person(string name = "");//构造函数string getName(); //返回姓名

void show(); //显示姓名

};

class Student:public Person{ private:

int m_id; //学号

double m_a, m_b, m_c; //三门课成绩double m_Avg; //平均成绩

public:

Student(string name = "", int id = ' ', double a = 0,double b = 0,double c = 0);//构造函数

void show(); //显示姓名、学号、三门课成绩、平均成绩(要求输出时保留两位小数)

double getAvg();//返回平均成绩};

/* 你的答案嵌入在这里*/

int main(){

Student *s1 = new Student("Zhanghua",11,80,90,100); s1->show();

cout<<"The average score of "<< s1->getName()<< " is "<<s1->getAvg(); // (要求输出时保留两位小数)

delete s1;

输入样例:

在这里给出一组输入。例如:

输出样例:

在这里给出相应的输出。例如:

| 教师提交

代码 编译器: GXX

Person::Person(string name ) {

m_name=name; }s tring Person::getName() //返回姓名{

return m_name; }

void Person::show() {

cout<<m_name; }

Student::Student(string name , int id, double a,double b,double c ):Person(name)

{

m_id=id; m_a=a; m_b=b; m_c=c;

m_Avg=(a+b+c)/3.0; }v oid Student::show() //显示姓名、学号、三门课成绩、平均成绩(要求输出时保留两

位小数) {

Person::show();

cout<<" "<<m_a<<" "<<m_b<<" "<<m_c<<" "<<fixed<<setprecision(2) <<m_Avg<<endl;

}

double Student::getAvg() {

return m_Avg; }

| 参考答案

答案 编译器: GXX

return 0; }

33

34

Zhanghua 80 90 100 90.00

The average score of Zhanghua is 90.00

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 18/27

6-6 随机题目池 6 (1 选 1) 每题 5 分

6-6-1 Circle 类用于描述一个圆:

包含一个数据成员:圆的半径,默认为0

包含成员函数 getArea ,用于获取圆的面积, 取3.14

两个圆可以相加,相加的操作规定为:两个圆的半径相加请完善程序。

函数接口定义:

输入样例:

输入两个圆的半径。例如:

输出样例:

输出 c3 的面积。例如:

| 教师提交

代码编译器: GXX class Circle{

double r; public:

Circle(double _r=0) {

r=_r; }d ouble getArea() {

return 3.14*r*r;

π

#include <iostream> using namespace std;

// 请将答案填在这里

int main() { double r1, r2;

cin >> r1 >> r2; // 输入两个圆的半径

Circle c1(r1), c2(r2), c3; // 创建两个圆cout << c3.getArea() << endl;

c3 = c1 + c2;

cout << c3.getArea() << endl; return 0;

}

const Circle operator+(const Circle& c) {

return Circle(r+c.r);

} };

| 参考答案

答案 编译器: GXX

6-7 随机题目池 7 (1 选 1) 每题 5 分

6-7-1Shape 类用于描述形状,要求如下:包含两个数据成员:形状的名称、形状的颜色

构造函数,按规定格式输出形状的名称析构函数,按规定格式输出形状的名称成员函数 getName ,返回该形状的名称成员函数 getColor ,返回该形状的颜色

成员函数 getArea ,返回该形状的面积,默认返回0

成员函数 getPerimeter ,返回该形状的周长,默认返回0

成员函数 draw ,用于绘制图形,按规定格式输出形状的颜色请完善 Shape 的定义。

裁判测试程序样例:

#include <iostream> #include <string> using namespace std;

// 请将答案填写在这里

void display(Shape *p) {

cout << "name: " << p->getName() << endl << "area: " << p->getArea() << endl

<< "perimeter: " << p->getPerimeter() << endl; } i nt main() { Shape *p;

string color;

cin >> color; // 输入形状的颜色

// 测试Shape类

p = new Shape("1-Shape", color); display(p);

p->draw(); delete p;

123456789

输入样例:

输入形状的颜色:

输出样例:

第1行是构造函数的输出;第2、3、4行是 display 函数的输出;第5行是 draw 函数的输出;第6行是析构函数的输出:

| 教师提交

return 0; }

25

26

red

create Shape: 1-Shape

name: 1-Shape

area: 0

perimeter: 0 draw Shape, color: red

destroy Shape: 1-Shape

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 21/27

代码 编译器: GXX

class Shape{ protected:

string name,color; public:

Shape(string _name, string _color) {

name=_name; color=_color;

cout<<"create Shape: "<<name<<endl;

}~ Shape() {

cout<<"destroy Shape: "<<name<<endl; }s tring getName() {

return name; }s tring getColor() {

return color; }d ouble getArea() {

return 0; }d ouble getPerimeter() {

return 0; }v oid draw() {

cout<<"draw Shape, color: "<<color<<endl;

} };

| 参考答案

答案 编译器: GXX

6-8 随机题目池 8 (1 选 1) 每题 5 分

6-8-1 该题的 Shape 类与上一题一样。

Shape 类用于描述形状,要求如下:

包含两个数据成员:形状的名称、形状的颜色

构造函数,按规定格式输出形状的名称析构函数,按规定格式输出形状的名称成员函数 getName ,返回该形状的名称成员函数 getColor ,返回该形状的颜色

成员函数 getArea ,返回该形状的面积,默认返回0

成员函数 getPerimeter ,返回该形状的周长,默认返回0成员函数 draw ,用于绘制图形,按规定格式输出形状的颜色

Square 类用于描述正方形,继承自 Shape 类

成员函数 draw ,用于绘制图形,按规定格式输出正方形的颜色、边长

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 22/27

Rect 类用于描述长方形,继承自 Shape 类

成员函数 draw ,用于绘制图形,如果宽、高相等,按规定格式输出边长,否则按规定格式输出宽、高

请完善 Shape 、 Square 、 Rect 三个类的定义。

裁判测试程序样例:

#include <iostream> #include <string> using namespace std;

// 请将代码填写在这里

void display(Shape *p) {

cout << "name: " << p->getName() << endl << "area: " << p->getArea() << endl

<< "perimeter: " << p->getPerimeter() << endl; } i nt main() { Shape *p;

int choice; int length; int width, height; string color;

cin >> choice; // 输入测试序号cin >> color; // 输入形状的颜色

switch (choice) { case 1:

// 测试Shape类

p = new Shape("1-Shape", color); display(p);

p->draw(); delete p;

break; case 2:

// 测试Square类

cin >> length; // 正方形的边长

p = new Square("2-Square", color, length);

display(p); p->draw(); delete p;

break; case 3:

// 测试Rect类

cin >> width >> height; // 长方形的宽和高

p = new Rect("3-Rect", color, width, height);

display(p); p->draw(); delete p;

break; default:

break; }

123456789

测试1: Shape类

输入序号1、形状的颜色:

输出样例:

第1行是构造函数的输出;第2、3、4行是 display 函数的输出;第5行是 draw 函数的输出;第6行是析构函数的输出:

测试2: Square类

输入测试序号2、正方形的颜色、边长:

输出样例:

第1、2行是构造函数的输出;第3、4、5行是 display 函数的输出;第6行是 draw 函数的输出;第7、8行是析构函数的输出:

测试3:Rect类(宽、高不相等的情况)

输入测试序号3、长方形的颜色、宽、高。例如:

输出样例:

return 0; }

49

50

51

1r ed

create Shape: 1-Shape

name: 1-Shape

area: 0

perimeter: 0 draw Shape, color: red

destroy Shape: 1-Shape

2r ed 3 c

reate Shape: 2-Square

create Square: 2-Square

name: 2-Square

area: 9

perimeter: 12

draw Square, color: red, length: 3

destroy Square: 2-Square destroy Shape: 2-Square

3r

ed

3 4

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

第1、2行是构造函数的输出;第3、4、5行是 display 函数的输出;第6行是 draw 函数的输出;第7、8行是析构函数的输出。例如:

测试4:Rect类(宽、高相等的情况)

输入测试序号3、长方形的颜色、宽、高。例如:

输出样例:

第1、2行是构造函数的输出;第3、4、5行是 display 函数的输出;第6行是 draw 函数的输出;第7、8行是析构函数的输出。例如:

| 教师提交

代码 编译器: GXX

class Shape{ protected:

string name,color; public:

Shape(string _name, string _color) {

name=_name; color=_color;

cout<<"create Shape: "<<name<<endl; }v irtual ~Shape() {

cout<<"destroy Shape: "<<name<<endl; }s tring getName() {

return name; }s tring getColor() {

return color;

create Shape: 3-Rect

create Rect: 3-Rect

name: 3-Rect

area: 12

perimeter: 14

draw Rect, color: red, width: 3, height: 4

destroy Rect: 3-Rect destroy Shape: 3-Rect

3r

ed

3 3

create Shape: 3-Rect

create Rect: 3-Rect

name: 3-Rect

area: 9

perimeter: 12

draw Square, color: red, length: 3

destroy Rect: 3-Rect destroy Shape: 3-Rect

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 25/27

}v irtual double getArea()

{

return 0; }v irtual double getPerimeter() {

return 0; }v irtual void draw() {

cout<<"draw Shape, color: "<<color<<endl;

} };

class Square:public Shape {

int length; public:

Square(string _name, string _color, int l):Shape(_name,_color) {

length=l;

cout<<"create Square: "<<name<<endl; }

double getArea() {

return length*length; }d ouble getPerimeter() {

return length*4; }v oid draw() {

cout<<"draw Square, color: "<<color<<", length: " <<length<<endl;

}~ Square() {

cout<<"destroy Square: "<<name<<endl;

} };

class Rect:public Shape {

int width, height; public:

Rect(string _name, string _color, int w,int h):Shape(_name,_color) {

width=w; height=h;

cout<<"create Rect: "<<name<<endl; }

double getArea() {

return width*height; }d ouble getPerimeter() {

return 2*(width+height); }v oid draw() {

if(width==height)

cout<<"draw Square, color: "<<color<<", length: "<<width<<endl; else

6/6/24, 5:54 PM PTA | 程序设计类实验辅助教学平台

https://pintia.cn/problem-sets/1793236790085091328/paper/type/answer 26/27

cout<<"draw Rect, color: "<<color<<", width: "<<width<<", height: "<<height<<endl;

}~ Rect() {

cout<<"destroy Rect: "<<name<<endl;

} };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸

信息收集&SSH Server IP addressPorts Open192.168.8.100TCP:22,25,80,110,119,4555 Nmap 扫描: $ nmap -p- 192.168.8.100 --min-rate 1000 -sC -sV 结果: Host is up (0.00061s latency). Not shown: 65529 closed tcp ports (conn-refused) PORT STATE SERVICE…

RK3588开发板中使用Qt对zip文件进行解压

操作步骤&#xff1a; 下载源码quazip-0.7.3.zip &#xff0c;在网上找找下载地址上传源码进行解压&#xff0c;然后使用命令 cd quazip-0.7.3 qmake make主要用的是quazip-0.7.3/quazip这个里面的源码&#xff0c;然后把源码加入到自己创建的qt项目pro中&#xff0c;导入方式…

phpStudy安装sqli-labs

phpStudy安装sqli-labs git地址&#xff1a;https://github.com/Audi-1/sqli-labs 点击管理–>根目录 将git下载的sqli-labs文件放进去并解压 进入sql-connections修改 修改db-creds.inc文件为自己数据库的账号密码 更改php版本为5.*&#xff0c;因为这个程序只能在php 5.…

[Golang] go-kit 介绍和使用 (微服务实现工具)

文章目录 1.go-kit 介绍1.1 go-kit 三层结构 2.go-kit 实例 1.go-kit 介绍 go-kit是一个分布式的开发工具集&#xff0c;在大型的组织&#xff08;业务&#xff09;中可以用来构建微服务&#xff0c;其解决了分布式系统中大多数常见问题&#xff0c;因此&#xff0c;使用者可以…

Paragon NTFS for Mac 15软件下载-详细安装教程视频

​Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具&#xff0c;可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区&#xff0c;因为在Mac OS X 系统上&#xff0c;默认状态下我们只能读取NTFS 分区…

Java Arrays 类的常用方法详解

Arrays 类是 Java 标准库中的一个实用工具类&#xff0c;提供了许多静态方法来操作数组。其中一些方法在日常开发中使用频率较高。以下是一些在实际开发中最常用的方法&#xff1a; 1. toString 方法 将数组转换为字符串表示。 int[] array {1, 2, 3, 4, 5}; System.out.pr…

Spring-kafka消费者消费的一些问题

前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目&#xff0c;如 Spring Cloud。通过与 Spring Boot 的自动配置结合&#xff0c;开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…

Arm平台编译linuxdeployqt

在网上看了一下网友的分享&#xff0c;这个linuxdeployqt工具主要是用来打包qt程序的&#xff0c;但是程序不支持arm平台&#xff0c;需要下载源码编译才能用&#xff0c;自己测试了一下成功了&#xff0c;记录分享一下 操作步骤&#xff1a; 去下载源码&#xff1a;源码下载我…

揭开 Docker 容器的神秘面纱:深入理解容器原理

前言 前几年比较火的是微服务&#xff0c;再然后就是云。讨论技术必谈微服务&#xff0c;要上云&#xff0c;开发出的产品也都是某某云。现在讨论比较少了&#xff0c;因为AI盖过他们。还有就是因为容器技术&#xff0c;现在几乎都是k8s&#xff0c;云原生。要比较快的上手k8s…

HCIP笔记(拖拽题)

1、接口安全保护动作的名称和操作对应关系&#xff1a; 1&#xff09;restrict&#xff1a;丢弃触发静态MAC地址漂移的报文&#xff0c;并上报告警&#xff1b; 2&#xff09;protect&#xff1a;只丢弃触发触发静态MAC地址漂移的报文&#xff0c;不上报告警&#xff1b; 3&…

【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP

测试环境&#xff1a;Linux系统CentOS7.6、宝塔面板、Nginx、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;16种&#xff0c;看图 这套带前端uniapp纯源码&#xff0c;手机端和pc端都有纯源码&#xff0c;后…

【C++】 基础复习 | 数据类型,输入,输出流 scanf printf

文章目录 1 基本数据类型1.1 基本数据类型1.2 构造类型1.3 指针类型&#xff08;Pointers&#xff09; 2 基础输入输出2.1 通过输入输出操作符>> <<2.2 通过scanf和printf输入和输出2.2.1 输出printf 函数2.2.2 输出scanf 函数2.2.3 注意事项 1 基本数据类型 了解…

list集合自定义排序

一、基本类型排序 1.list中只有数字或字符串 //升序排序 List<T> ,T为数字或字符串 Collections.sort(list); //降序排序 Collections.sort(list,Collections.reverseOrder());2.list中为对象 基于jdk.18 import lombok.Data;Data public class User {private int i…

Linux基础指令(二)(文件、权限等)

目录 普通文件的操作 touch cat 翻页 标准输出重定向&#xff1a; 标准输出重定向种类&#xff1a;​​​​​​​ 管道符&#xff1a;&#xff5c; 压缩指令&#xff1a; zip gzip tar Linux下最常见的打包指令 其他系统指令&#xff1a;​​​​​​​ 快捷…

mysql update sql语句常见错误

以下update语句得不到预期结果 update event_detail set step_status1 and impact_area222isss.jsjd.lemem.com and end_time2024-06-14 17:23:39 where event_id91 and stepother_group2; 多个字段改动&#xff0c;不能使用 and连接&#xff0c;使用逗号“&#xff0c;”分隔即…

【C语言】进程间通信之管道pipe

进程间通信之管道pipe 一、进程间通信管道pipe()管道的读写行为 最后 一、进程间通信 管道pipe() 管道pipe也称为匿名管道&#xff0c;只有在有血缘关系的进程间进行通信。管道的本质就是一块内核缓冲区。 进程间通过管道的一端写&#xff0c;通过管道的另一端读。管道的读端…

【Python高阶编程】如何模拟生成训练日志并记录到文件

Python综合练习&#xff1a;生成训练日志 任务描述 在机器学习模型训练过程中&#xff0c;我们经常会记录模型的训练日志&#xff0c;包括accuracy&#xff08;准确率&#xff09;和loss&#xff08;损失&#xff09;。这个综合练习的目标是编写一段Python代码&#xff0c;模…

Linux下Shell脚本基础知识

主要参考视频&#xff1a; 这可能是B站讲的最好的Linux Shell脚本教程&#xff0c;3h打通Linux-shell全套教程&#xff0c;从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档&#xff1a; Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…

写在前面的话

《CSS in Depth》第二版开篇词 A minute to learn … A lifetime to master. ——Othello 「学会只需一分钟&#xff0c;精通却要一辈子」——这是诞生于上世纪的经典游戏《黑白棋》中的一个标语。 不知道看到这句话的你&#xff0c;是否有过这样的经历&#xff1a;在自己人生…

adb简单使用命令

1. 查看当前连接的设备 adb devices 2. 文件路径 adb install apk 注意文件路径中不能有中文 3. adb shell ps Toplogcatlogcat可以结合greplogcat *:w 显示警告级别以上de 4. adb uninstall 软件名 1.软件名如何查看&#xff1f; 使用命令adb shell pm list packages会…