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.mfbz.cn/a/714071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件&#xff0c;它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时&#xff0c;色彩校正是一个重要的步骤&#xff0c;它可以调整视频的色调、亮度和对比度等参数&#xff0c;使视频更加生动和鲜明。在会声会影中&#xff0c;色彩校正功…

C#(C Sharp)学习笔记_封装【十八】

什么是封装&#xff1f; 封装是面向对象思维的三大特性之一。封装是将数据和对数据进行操作的函数绑定到一起的机制。它隐藏了对象的内部状态和实现细节&#xff0c;只对外提供必要的接口&#xff0c;从而确保对象内部状态的完整性和安全性。封装的主要目的是增强安全性和简化…

【教学类-64-02】20240610色块眼力挑战(二)-2-25宫格色差10-100(10倍)(星火讯飞)

背景需求 以下的色块眼里挑战需要人工筛选图片&#xff0c;非常繁琐。 【教学类-64-01】20240607色块眼力挑战&#xff08;一&#xff09;-0-255随机底色-CSDN博客文章浏览阅读446次&#xff0c;点赞12次&#xff0c;收藏5次。【教学类-64-01】20240607色块眼力挑战&#xff…

C语言——自定义类型:结构体

前言 本篇博客位大家介绍C语言中一块儿重要的内容&#xff0c;那就是结构体&#xff0c;关于结构体的内容&#xff0c;大家需要深入掌握&#xff0c;在后面的学习中依然会用到&#xff0c;如果你对本文感兴趣&#xff0c;麻烦点进来的老铁一键三连。多多支持&#xff0c;下面我…

食家巷助力“甘肃乡村振兴,百强主播·打call 甘味”活动

2024年&#xff0c;甘肃省“商务乡村振兴”促消费暨“百强主播打call 甘味”活动在天水市龙城广场盛大启动。 活动现场&#xff0c;来自甘肃省 14 个市州的农特产品展台琳琅满目&#xff0c;让人目不暇接。此次活动中&#xff0c;各企业带来了多款深受消费者喜爱的产品&a…

【C++提高编程-06】----C++之STL-函数对象、谓词、仿函数

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

这 10 种架构师,不合格!

大家好&#xff0c;我是君哥。 架构师这个岗位是好多程序员努力的方向&#xff0c;尤其是刚毕业的时候&#xff0c;对架构师有一种崇拜感。毕竟从初级到架构要经历好几次级别飞跃。 工作时间久了&#xff0c;发现架构师这个岗位&#xff0c;其实定义非常广泛&#xff0c;根据工…

linux 部署瑞数6实战(维普,药监局)sign第二部分

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx …

如何通过在线封装APP快速上线?小猪APP分发帮你解决难题

你是否曾经为了上线一款APP而头疼不已&#xff1f;开发完成后&#xff0c;封装、测试、分发&#xff0c;这些繁琐的步骤让人望而却步。别担心&#xff0c;小猪APP分发来了&#xff01;这篇文章将带你了解如何通过在线封装APP快速上线&#xff0c;并且告诉你为什么选择小猪APP分…

[Linux] TCP协议介绍(3): TCP协议的“四次挥手“过程、状态分析...

TCP协议是面向连接的 上一篇文章简单分析了TCP通信非常重要的建立连接的"三次握手"的过程 本篇文章来分析TCP通信中同样非常重要的断开连接的"四次挥手"的过程 TCP的"四次挥手" TCP协议建立连接 需要"三次握手". "三次挥手&q…

Postman下发流表至Opendaylight

目录 任务目的 任务内容 实验原理 实验环境 实验过程 1、打开ODL控制器 2、网页端打开ODL控制页面 3、创建拓扑 4、Postman中查看交换机的信息 5、L2层流表下发 6、L3层流表下发 7、L4层流表下发 任务目的 1、掌握OpenFlow流表相关知识&#xff0c;理解SDN网络中L…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

javaWeb项目-springboot+vue人事管理系统功能介绍

本项目源码&#xff1a;java-springbootvue人事管理系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot…

高级人工智能复习 题目整理 中科大

题目整理 填空 1.准确性&#xff0c;复杂性&#xff0c;验证集 2. 3 2 n 3^{2^n} 32n 3 C 2 n m 3^{C^m_{2n}} 3C2nm​ 3 m 3^m 3m n 1 n1 n1 3. 状态 从状态s采取行动a后继续采用策略 π \pi π的收益 环境 4. 语法 语义 推理规则 5. 参与者&#xff0c;策略集&#xff…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0&#xff0c;…

【C语言】解决C语言报错:Format String Vulnerability

文章目录 简介什么是Format String VulnerabilityFormat String Vulnerability的常见原因如何检测和调试Format String Vulnerability解决Format String Vulnerability的最佳实践详细实例解析示例1&#xff1a;直接使用不受信任的输入作为格式化字符串示例2&#xff1a;未验证格…

英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元

【震撼发布】 英伟达最新力作——Nemotron-4 340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】 Nemotron-4 340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行…

基于WPF技术的换热站智能监控系统09--封装水泵对象

1、添加用户控件 2、编写水泵UI 控件中用到了Viewbox控件&#xff0c;Viewbox控件是WPF中一个简单的缩放工具&#xff0c;它可以帮助你放大或缩小单个元素&#xff0c;同时保持其宽高比。通过样式和属性设置&#xff0c;你可以创建出既美观又功能丰富的用户界面。在实际开发中…

RabbitMQ揭秘:轻量级消息队列的优缺点全解析

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 亲爱的读者朋友们,大家好!我是小米,一个热爱技术、喜欢分享的大哥哥。今天我们来聊聊一个在消息队列领域非常重要的工具——RabbitMQ。作为一个在通信…

EasyExcel文件导出,出现有文件但没有数据的问题

一开始由于JDK版本过高&#xff0c;我用的17&#xff0c;一直excel没有数据&#xff0c;表头也没有&#xff0c;后来摸索了好久&#xff0c;找了资料也没有&#xff0c;后来改了代码后报了一个错误&#xff08;com.alibaba.excel.exception.ExcelGenerateException: java.lang.…