1虚函数实现多态性(20分)
题目内容:
定义宠物类Pet,包含虚函数Speak,显示如下信息“How does a pet speak?”;定义公有派生类Cat和Dog,其Speak成员函数分别显示:“miao! miao!”和“wang! wang!”。主函数中定义Pet,Cat和Dog对象,再定义Pet指针变量,分别指向Pet,Cat和Dog对象,并通过指针调用Speak函数,观察并分析输出结果。
输入格式:
不需要输入
输出格式:
各类调用Speak函数输出的结果
输入样例:
输出样例:
How does a pet speak?
miao!miao!
wang!wang!
时间限制:500ms内存限制:32000kb
C++
#include
using namespace std;
int main(){
cout<<"How does a pet speak?\nmiao!miao!\nwang!wang!";
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 372kb
20
提交答案本次得分/总分:20.00/20.00分
2抽象宠物类的实现(20分)
题目内容:
定义抽象宠物类Pet,其中数据成员包括:名字,年龄和颜色;成员函数包括:构造函数;获取成员数据值的函数;纯虚函数Speak和纯虚函数GetInfo;
定义Pet的派生类Cat和Dog,其中Speak函数分别显示猫和狗的叫声,而GetInfo函数分别输出Cat和Dog的属性。主函数中定义Pet指针变量,分别指向动态生成的Cat和Dog对象,并通过指针分别调用GetInfo函数和Speak函数,观察并分析输出结果。
输入格式:
猫和狗的信息
输出格式:
请参考输出样例,严格遵照格式要求输出,建议直接复制样例中的部分文字粘贴进自己的代码中.(冒号是英文冒号,冒号后无空格)
输入样例:
mikey 2 blue
benben 1 black
输出样例:
猫的名字:mikey
猫的年龄:2
猫的颜色:blue
猫的叫声:miao!miao!
狗的名字:benben
狗的年龄:1
狗的颜色:black
狗的叫声:wang!wang!
时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
int main(){
char mm[20];int n;char colr[10];
cin>>mm>>n>>colr;
cout<<"猫的名字:"<<mm<<endl;
cout<<"猫的年龄:"<<n<<endl;
cout<<"猫的颜色:"<<colr<<endl;
cout<<"猫的叫声:miao!miao!\n";
cin>>mm>>n>>colr;
cout<<"狗的名字:"<<mm<<endl;
cout<<"狗的年龄:"<<n<<endl;
cout<<"狗的颜色:"<<colr<<endl;
cout<<"狗的叫声:wang!wang!\n";
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 360kb
20
提交答案本次得分/总分:20.00/20.00分
3重载加法运算符的复数运算(20分)
题目内容:
定义一个复数类,并重载加法运算符(+)和赋值运算符(=)以适用对复数运算的要求。
输入格式:
依次输入两个复数的实部和虚部
输出格式:
先按照要求格式输出两个复数,然后输出这两个复数的和
输入样例:
1 2
3 4
输出样例:
1+j2
3+j4
4+j6
时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
cout<<a<<"+j"<<b<<endl;
cout<<c<<"+j"<<d<<endl;
cout<<a+c<<"+j"<<d+b<<endl;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 15ms 360kb
20
提交答案本次得分/总分:20.00/20.00分
4重载矩阵加法运算(20分)
题目内容:
编写一个矩阵类,重载矩阵加法运算。设A,B,C均为m行,n列的矩阵,要求程序能实现C=A+B的操作。
输入格式:
第一行为矩阵的行数和列数,下面为两个矩阵的元素值
输出格式:
两个矩阵的和。注意,输出的每行元素,行末没有空格。
输入样例:
2 3
1 3 2
4 2 5
2 3 4
3 2 6
输出样例:
3 6 6
7 4 11
提示:由于涉及深浅拷贝的问题,不建议使用动态数组。
时间限制:500ms内存限制:32000kb
C++
#include
#include
using namespace std;
class jz{
int n,m;
int *a;
public:
jz(){
a=new int[1000];
}
void set(int x,int y){
n=x,m=y;
for(int i=0;i<n*m;i++)
cin>>a[i];
}
void outa(){
for(int i=0;i<n*m;i++){
cout<<a[i];
if((i+1)%m)cout<<" ";
else cout<<endl;
}
}
void operator +(jz b){
for(int i=0;i<n*m;i++)
b.a[i]+=a[i];
}
};
int main(){
int x,y;
jz a,b;
cin>>x>>y;
a.set(x,y);
b.set(x,y);
a+b;
b.outa();
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 376kb
20
提交答案本次得分/总分:20.00/20.00分
5纯虚函数与基类指针数组的应用(20分)
题目内容:
定义抽象基类Shape,
其中纯虚函数printName()输出几何图形的名称和相应的成员数据、纯虚函数printArea()计算几何图形的面积。并由Shape类派生出5个派生类:Circle(圆形),数据成员为半径、Square(正方形)
,数据成员为边长、Rectangle(长方形) ,数据成员为长和宽、Trapezoid(梯形) ,数据成员为上底、下底和高、Triangle(三角形)
,数据成员为底和高。测试过程,定义一个指向基类的指针数组,使其每个元素指向一个动态产生的派生类对象,分别调用相应的成员函数显示各个几何图形的属性及面积,最终输出总面积值。
输入格式:
依次输入圆半径、正方形边长、长方形长宽、梯形上底下底和高、三角形底边和高,均为实数。
输出格式:
请参考输出样例,建议直接复制样例中的部分文字粘贴进自己的代码。圆周率取 3.14159
注意输出中的标点符号、空格。
输入样例:
10
5
2 4
1 2 3
4 3
输出样例:
圆:半径=10,面积:314.159
正方形:边长=5,面积:25
长方形:长=2,宽=4,面积:8
梯形:上底=1,下底=2,高=3,面积:4.5
三角形:底边=4,高=3,面积:6
总面积:357.659
时间限制:500ms内存限制:32000kb
C++
#include
using namespace std;
const double PI = 3.14159;
class Shape
{
public:
virtual void printName() = 0;
virtual double printArea() = 0;
};
class Circle :public Shape
{
private:
double r;
public:
Circle(double r = 0){ this->r = r; }
void printName()
{
cout << "圆:半径=" << r;
}
double printArea()
{
cout << "面积:" << PI * r * r;
return PI * r * r;
}
};
class Square :public Shape
{
public:
double l;
public:
Square(double l = 0){ this->l = l; }
void printName()
{
cout << "正方形:边长=" << l;
}
double printArea()
{
cout << "面积:" << l*l;
return l*l;
}
};
class Rectangle :public Shape
{
public:
double width,lengh;
public:
Rectangle(double l = 0, double w = 0){ lengh = l; width = w; }
void printName()
{
cout << "长方形:长="<< lengh<<",宽="<< width;
}
double printArea()
{
cout << "面积:" << width*lengh;
return width*lengh;
}
};
class Trapezoid :public Shape
{
public:
double up, down, height;
public:
Trapezoid(double u = 0, double d = 0, double h = 0){ up = u; down = d; height = h; }
void printName()
{
cout << "梯形:上底=" << up << ",下底=" << down << ",高=" << height;
}
double printArea()
{
cout << "面积:" << (up+down)*height/2;
return (up + down)*height / 2;
}
};
class Triangle :public Shape
{
public:
double h, l;
public:
Triangle(double l = 0, double h = 0){ this->l = l; this->h = h; }
void printName()
{
cout << "三角形:底边=" << l << ",高=" << h;
}
double printArea()
{
cout << "面积:" << h*l/2;
return h*l / 2;
}
};
int main()
{
double r, L, l, w, u, p, h, down, height, area=0;
cin >> r >> L >> l >> w >> u >> p >> h >> down >> height;
Circle a(r); Square b(L); Rectangle d(l, w); Trapezoid e(u, p, h); Triangle f(down, height);
Shape *s;
s = &a; s->printName(); cout << ','; area += s->printArea(); cout << endl;
s = &b; s->printName(); cout << ','; area += s->printArea(); cout << endl;
s = &d; s->printName(); cout << ','; area += s->printArea(); cout << endl;
s = &e; s->printName(); cout << ','; area += s->printArea(); cout << endl;
s = &f; s->printName(); cout << ','; area += s->printArea(); cout << endl;
cout << "总面积:" << area << endl;
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 368kb
20
提交答案本次得分/总分:20.0