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 <iostream>
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<iostream>
#include<cmath>
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<iostream>
#include<cmath>
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<iostream>
#include<cmath>
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 <iostream>
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