学期结束,班主任决定表彰一批学生,已知该班学生数在6至50人之间,有三类学生:普通生,特招运动员,学科专长生,其中学科专长生不超过5人。
主函数根据输入的信息,相应建立GroupA, GroupB, GroupC类对象。
GroupA类是普通生,有2门课程的成绩(均为不超过100的非负整数);
GroupB类是特招运动员,有2门课程的成绩(均为不超过100的非负整数),1次运动会的表现分,表现分有:A、B、C、D共4等。
GroupC类是学科专长生,有5门课程的成绩(均为不超过100的非负整数)。
表彰人员至少符合以下3个条件中的一个:
(1)2门课程平均分在普通生和特招运动员中,名列第一者。
a.该平均分称为获奖线。
b.存在成绩并列时,则全部表彰,例如某次考试有2人并列第1,则他们全部表彰。
(2)5门课程平均分达到或超过获奖线90%的学科专长生,给予表彰。
(3)2门课程平均分达到或超过获奖线70%的特招运动员,如果其运动会表现分为A,给予表彰。
输入格式:每个测试用例占一行,第一项为类型,1为普通生,2为特招运动员,3为学科专长生, 输入0表示输入的结束。第二项是学号,第三项是姓名。对于普通生来说,共输入5项,第4、5项是课程成绩。对于特招运动员来说,共输入6项,第4、5项是课程成绩,第6项是运动会表现。对于学科专长生来说,共输入8项,第4、5、6、7、8项是课程成绩。
输出时,打印要表彰的学生的学号和姓名。(输出顺序与要表彰学生的输入前后次序一致)
函数接口定义:
以Student为基类,构建GroupA, GroupB和GroupC三个类
裁判测试程序样例:
#include<iostream>
#include <string>
using namespace std;
/* 请在这里填写答案 */
int main()
{
const int Size=50;
string num, name;
int i,ty,s1,s2,s3,s4,s5;
char gs;
Student *pS[Size];
int count=0;
for(i=0;i<Size;i++){
cin>>ty;
if(ty==0) break;
cin>>num>>name>>s1>>s2;
switch(ty){
case 1:pS[count++]=new GroupA(num, name, s1, s2); break;
case 2:cin>>gs; pS[count++]=new GroupB(num, name, s1,s2, gs); break;
case 3:cin>>s3>>s4>>s5; pS[count++]=new GroupC(num, name, s1,s2,s3,s4,s5); break;
}
}
for(i=0;i<count;i++) {
pS[i]->display();
delete pS[i];
}
return 0;
}
输入样例:
1 001 AAAA 96 80
2 009 BBB 82 75 A
1 007 CC 100 99
3 012 CCCC 97 95 90 99 93
1 003 DDD 62 50
1 022 ABCE 78 92
2 010 FFF 45 40 A
3 019 AAA 93 97 94 82 80
0
输出样例:
009 BBB
007 CC
012 CCCC
WriteUp:
class Student{
protected:
int s1,s2,s3,s4,s5;
string name,num;
char gs;
public:
static float max;
Student(){
s1=s2=s3=s4=s5=0;
num="";
name="";
}
virtual void display()=0;
};
float Student::max=0;
class GroupA:public Student{
public:
void display(){
if((s1+s2)==max)
cout<<num<<" "<<name<<endl;
}
GroupA(string nu,string na,int S1,int S2){
name=na;
num=nu;
s1=S1;
s2=S2;
if((s1+s2)>max)
max=s1+s2;
}
};
class GroupB:public Student{
public:
GroupB(string nu,string na,int S1,int S2,char Gs){
name=na;
num=nu;
s1=S1;
s2=S2;
gs=Gs;
if((s1+s2)>max)
max=s1+s2;
}
void display(){
if((s1+s2)>=max*0.7&&gs=='A'||(s1+s2)>=max)
cout<<num<<" "<<name<<endl;
}
};
class GroupC:public Student{
public:
GroupC(string nu,string na,int S1,int S2,int S3,int S4,int S5){
name=na;
num=nu;
s3=S3;
s4=S4;
s5=S5;
s1=S1;
s2=S2;
}
void display(){
if((s1+s2+s3+s4+s5)/5.0>=max/2.0*0.9)
cout<<num<<" "<<name<<endl;
}
};
定义一个车(vehicle)基类,有虚函数Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,它们都有Run、Stop等成员函数。完成这些类使得主函数可以运行并得到正确的输出结果。
函数接口定义:
完成类代码
裁判测试程序样例:
/* 请在这里填写答案 */
int main(int argc, char const *argv[])
{
Vehicle veh;
Bicycle bic;
Motorcar mot;
run(veh);
run(bic);
run(mot);
return 0;
}
输入样例:
无
输出样例:
在这里给出相应的输出。例如:
Vehicle run
Bicycle run
Motorcar run
WriteUp:
#include<iostream>
using namespace std;
class Vehicle {
public:
void run() {}
};
class Bicycle : virtual public Vehicle {
public:
void virtual run() {}
};
class Motorcar : virtual public Vehicle {
public:
void virtual run() {}
};
void run(Vehicle &p) {cout << "Vehicle run" << endl;}
void run(Bicycle &p) {cout << "Bicycle run" << endl;}
void run(Motorcar &p) {cout << "Motorcar run";}
按要求完成下面的程序:
1、定义一个Animal
类,包含一个void类型的无参的speak
方法,输出“animal language!”。
2、定义一个Cat
类,公有继承自Animal
类,其成员包括:
(1)私有string
类型的成员m_strName
;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数print_name
,无形参,void
类型,功能是输出成员m_strName
的值,具体输出格式参见main函数和样例输出。
函数接口定义:
参见题目描述。
裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
/* 请在这里填写答案 */
int main()
{
Cat cat("Persian"); //定义派生类对象
cat.print_name(); //派生类对象使用本类成员函数
cat.speak(); //派生类对象使用基类成员函数
return 0;
}
输入样例:
本题无输入。
输出样例:
cat name: Persian
animal language!
WriteUp:
class Animal{
public:
void speak(){
cout<<"animal language!"<<endl;
}
};
class Cat:public Animal{
public:
string m_name;
void print_name(){
cout<<"cat name: "<<m_name<<endl;
}
Cat(string name){
m_name = name;
}
};
根据所给的基类Student和Teacher,定义Graduate类
类定义:
#include <iostream>
#include <string>
using namespace std;
class Teacher
{public:
Teacher(string nam,int a,string t)
{name=nam;
age=a;
title=t;}
void display()
{cout<<"name:"<<name<<endl;
cout<<"age"<<age<<endl;
cout<<"title:"<<title<<endl;
}
protected:
string name;
int age;
string title;
};
class Student
{public:
Student(string nam,char s,float sco)
{name1=nam;
sex=s;
score=sco;}
void display1()
{cout<<"name:"<<name1<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
}
protected:
string name1;
char sex;
float score;
};
/* 请在这里填写答案 */
裁判测试程序样例:
int main( )
{Graduate grad1("Wang-li",24,'f',"assistant",89.5,1234.5);
grad1.show( );
return 0;
}
输出样例:
name:Wang-li
age:24
sex:f
score:89.5
title:assistant
wages:1234.5
WriteUp:
class Graduate:public Teacher,public Student{
protected:
double wages;
public:
Graduate(string na,int a,char ss,string t,float score,float wag):Teacher(na,a,t),Student(na,ss,score),wages(wag)
{}
void show()
{
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<"title:"<<title<<endl;
cout<<"wages:"<<wages<<endl;
}
};
已知抽象类类Shape定义如下,其中两个纯虚函数分别为计算面积getArea()和计算周长getPerim()。请通过Shape类派生出矩形类Rectangle和圆类Circle,计算各自的面积和周长,并能够按照main函数给出的测试代码完成给定的输入。
####Shape类定义及测试程序如下:
#include <iostream>
using namespace std;
const double PI=3.14;
class Shape {
public:
virtual double getArea()=0;
virtual double getPerim()=0;
};
/*请在这里输入你的代码*/
int main(){
double r,l,w;
cin>>r;
cin>>l>>w;
Shape *p=NULL;
p=new Circle(r);
print(p);//输出圆面积与周长
p=new Rectangle(l,w);
print(p);//输出矩形面积与周长
return 0;
}
输入样例:
1 2 3
输出样例:
Area:3.14
Perimeter:6.28
Area:6
Perimeter:10
WriteUp:
class Circle:public Shape{
private:
double r;
public:
Circle(double r_):r(r_)
{}
double getArea(){
return 3.14*r*r;
}
double getPerim(){
return 2*3.14*r;
}
};
class Rectangle:public Shape{
private:
double a,b;
public:
Rectangle(double a_,double b_):a(a_),b(b_)
{}
double getArea()
{
return a*b;
}
double getPerim()
{
return 2*(a+b);
}
};
void print(Shape *p){
cout<<"Area:"<<p->getArea()<<endl<<"Perimeter:"<<p->getPerim()<<endl;
}
定义平面二维点类CPoint,有数据成员x坐标,y坐标,函数成员(构造函数复制构造函数、虚函数求面积GetArea,虚函数求体积函数GetVolume、输出点信息函数print。由CPoint类派生出圆类Cirle类(新增数据成员半径radius),函数成员(构造函数、复制构造函数、求面积GetArea,虚函数求体积函数GetVolume、输出圆信息函数print。 再由Ccirle类派生出圆柱体Ccylinder类(新增数据成员高度height),函数成员(构造函数、复制构造函数、求表面积GetArea,求体积函数GetVolume、输出圆柱体信息函数print。在主函数测试这个这三个类。
输入格式:
0 0 例如:第一行读入圆心坐标。 1 2 第二行读入半径与高度。
输出格式:
分四行输出,分别代表圆心、底面积、表面积、体积。
输入样例:
在这里给出一组输入。例如:
0 0
1 2
输出样例:
在这里给出相应的输出。例如:
Center:(0,0)
radius=1
height:2
BasalArea:3.14159
SupfaceArea:18.8496
Volume:6.28319
WriteUp:
#include <iostream>
#include <math.h>
#define PI 3.1415926
using namespace std;
//点
class CPoint{
double X,Y;
public:
CPoint(double x,double y);
CPoint(CPoint &cP);
virtual double GetArea(){}//求面积
virtual double GetVolume(){}//求体积
void print();
};
CPoint::CPoint(double x,double y):X(x),Y(y){}
CPoint::CPoint(CPoint &cP):X(cP.X),Y(cP.Y){}
void CPoint::print(){ cout<<"Center:("<<X<<","<<Y<<")"<<endl; }
//圆
class Cirle :public CPoint{
double Radius;
public:
Cirle(double x,double y,double r);
Cirle(Cirle& c);
double GetRadius(){ return Radius; }
double GetArea();//求面积
virtual double GetVolume();//求体积
void print();
};
Cirle::Cirle(double x,double y,double r):CPoint(x,y),Radius(fabs(r)){}
Cirle::Cirle(Cirle& c):CPoint(c),Radius(c.Radius){}
double Cirle::GetArea(){ return PI*Radius*Radius; }
double Cirle::GetVolume(){ return 3*PI*Radius*Radius*Radius/4; }
void Cirle::print(){ cout<<"radius="<<GetRadius()<<endl; }
//圆柱
class Ccylinder :public Cirle{
double Height;
public:
Ccylinder(double x,double y,double r,double h);
Ccylinder(Ccylinder &cc);
double GetHeight(){ return Height; }
double GetArea(); //面积
virtual double GetVolume(); //体积
void print();
};
Ccylinder::Ccylinder(double x,double y,double r,double h):Cirle(x,y,r),Height(fabs(h)){}
Ccylinder::Ccylinder(Ccylinder& cc):Cirle(cc),Height(cc.Height){}
double Ccylinder::GetArea(){ return PI*GetRadius()*GetRadius(); }
double Ccylinder::GetVolume(){ return PI*GetRadius()*GetRadius()*Height; }
void Ccylinder::print(){
cout<<"height:"<<GetHeight()<<endl;
cout<<"BasalArea:"<<GetArea()<<endl;
cout<<"SupfaceArea:"<<(2*GetArea()+2*PI*GetRadius()*Height)<<endl;
cout<<"Volume:"<<GetVolume()<<endl;
}
int main(){
double x,y,r,h;
cin>>x>>y>>r>>h;
CPoint cp(x,y);
Cirle c(x,y,r);
Ccylinder cc(x,y,r,h);
cp.print();
c.print();
cc.print();
return 0;
}
输出数据结果小数点后保留两位小数
#include <iomanip>
cout << setiosflags(ios::fixed) << setprecision(2) ;
输入格式:
销售一的 编号、销售件数、销售单价 销售二的 编号、销售件数、销售单价 销售三的 编号、销售件数、销售单价
输出格式:
总销售额 平均每件商品的实际售价
输入样例:
101 5 23.5
102 12 24.56
103 100 21.5
输出样例:
2387.66
20.41
WriteUp:
#include <iomanip>
#include <iostream>
using namespace std;
int main(void)
{
double sum = 0;
int n = 0;
for (int i = 0; i < 3; ++i)
{
double y;
int x;
cin >> x >> x >> y;
if (x > 10)
{
y *= 0.98;
}
sum += y*x*0.95;
n += x;
}
cout << setiosflags(ios::fixed) << setprecision(2) << sum << endl;
cout << setiosflags(ios::fixed) << setprecision(2) << sum/n << endl;
return 0;
}
编写代码实现一个表示点的父类Dot和一个表示圆的子类Cir,求圆的面积。
Dot类有两个private数据成员 float x,y;
Cir类新增一个private的数据成员半径float r 和一个public的求面积的函数getArea( );
主函数已经给出,请编写Dot和Cir类。
#include <iostream>
#include<iomanip>
using namespace std;
const double PI=3.14;
//请编写你的代码
int main(){
float x,y,r;
cin>>x>>y>>r;
Cir c(x,y,r);
cout<<fixed<<setprecision(2)<<c.getArea()<<endl;
return 0;
}
输入格式:
输入圆心和半径,x y r中间用空格分隔。
输出格式:
输出圆的面积,小数点后保留2位有效数字,注意:const double PI=3.14,面积=PI*r*r
。
输入样例:
在这里给出一组输入。例如圆的中心点为原点(0,0),半径为3:
0 0 4
输出样例:
在这里给出相应的输出。例如:
Dot constructor called
Cir constructor called
50.24
Cir destructor called
Dot destructor called
WriteUp:
#include <iostream>
#include<iomanip>
using namespace std;
const double PI=3.14;
class Dot{
private:
float x;
float y;
public:
Dot(float a,float b):x(a),y(b){
cout<<"Dot constructor called"<<endl;
}
~Dot(){
cout<<"Dot destructor called"<<endl;
}
};
class Cir:public Dot{
private:
float r;
public:
Cir(float a,float b,float c):Dot(a,b),r(c){
cout<<"Cir constructor called"<<endl;
}
~Cir(){
cout<<"Cir destructor called"<<endl;
}
double getArea(){
return PI*r*r;
}
};
int main(){
float X,Y,R;
cin>>X>>Y>>R;
Cir c(X,Y,R);
cout<<fixed<<setprecision(2)<<c.getArea()<<endl;
return 0;
}
根据以下代码段完善 ?? 处内容及程序内容,以实现规定的输出。
class Complex
{
public:
Complex(double r=0, double i=0):real(r), imag(i){ }
Complex operator+( ?? ) const;//重载双目运算符'+'
Complex operator-=( ?? ); //重载双目运算符'-='
friend Complex operator-( ?? ) const;//重载双目运算符'-'
void Display() const;
private:
double real;
double imag;
};
void Complex::Display() const
{
cout << "(" << real << ", " << imag << ")" << endl;
}
int main()
{
double r, m;
cin >> r >> m;
Complex c1(r, m);
cin >> r >> m;
Complex c2(r, m);
Complex c3 = c1+c2;
c3.Display();
c3 = c1-c2;
c3.Display();
c3 -= c1;
c3.Display();
return 0;
}
输入格式:
输入有两行,分别为两个复数的实部与虚部。
输出格式:
按样例格式输出结果。
输入样例:
在这里给出一组输入。例如:
4 2
3 -5
输出样例:
在这里给出相应的输出。例如:
(7, -3)
(1, 7)
(-3, 5)
WriteUp:
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0, double i=0):real(r), imag(i){ }
Complex operator+(Complex c) const;//重载双目运算符'+'
Complex operator-=(Complex c); //重载双目运算符'-='
friend Complex operator-(Complex c1,Complex c2) ;//重载双目运算符'-'
void Display() const;
private:
double real;
double imag;
};
Complex Complex::operator+ (Complex c)const{
c.imag=c.imag+this->imag;
c.real=c.real+this->real;
return c;
}
Complex Complex::operator-=(Complex c){
this->imag=this->imag-c.imag;
this->real=this->real-c.real;
return *this;
}
Complex operator-(Complex c1,Complex c2){
c1.imag=c1.imag-c2.imag;
c1.real=c1.real-c2.real;
return c1;
}
void Complex::Display() const
{
cout << "(" << real << ", " << imag << ")" << endl;
}
int main()
{
double r, m;
cin >> r >> m;
Complex c1(r, m);
cin >> r >> m;
Complex c2(r, m);
Complex c3 = c1+c2;
c3.Display();
c3 = c1-c2;
c3.Display();
c3 -= c1;
c3.Display();
return 0;
}
编写程序实现+ - * / 运算符重载,主要功能如下: 1、实现两复数(c1与c2)的加减乘除运算 2、实现复数c1与整数num的加减乘除运算 3、实现整数num与复数c1的加减乘除运算
输入格式:
c1实部 c1虚部 c2实部 c2虚部 整数num 具体格式见样例。
输出格式:
c1+c2结果 c1-c2结果 c1c2结果 c1/c2结果 c1+num结果 c1-num结果 c1num结果 c1/num结果 num+c1结果 num-c1结果 num*c1结果 num/c1结果 具体格式见输出样例
输入样例:
在这里给出一组输入。例如:
1.0 2.0
3.0 4.0
5
输出样例:
在这里给出相应的输出。例如:
c1+c2=(4.00,6.00i)
c1-c2=(-2.00,-2.00i)
c1*c2=(-5.00,10.00i)
c1/c2=(0.44,0.08i)
c1+num=(6.00,2.00i)
c1-num=(-4.00,2.00i)
c1*num=(5.00,10.00i)
c1/num=(0.20,0.40i)
num+c1=(6.00,2.00i)
num-c1=(4.00,-2.00i)
num*c1=(5.00,10.00i)
num/c1=(1.00,-2.00i)
WriteUp:
#include <iostream>
using namespace std;
int main(){
// c1 = 1 + 2i
// c2 = 3 + 4i
// num = 5
double a,b,c,d;
int num;
cin >> a >> b;
cin >> c >> d;
cin >> num;
printf("c1+c2=(%.2lf,%.2lfi)\n"
"c1-c2=(%.2lf,%.2lfi)\n"
"c1*c2=(%.2lf,%.2lfi)\n"
"c1/c2=(%.2lf,%.2lfi)\n"
"c1+num=(%.2lf,%.2lfi)\n"
"c1-num=(%.2lf,%.2lfi)\n"
"c1*num=(%.2lf,%.2lfi)\n"
"c1/num=(%.2lf,%.2lfi)\n"
"num+c1=(%.2lf,%.2lfi)\n"
"num-c1=(%.2lf,%.2lfi)\n"
"num*c1=(%.2lf,%.2lfi)\n"
"num/c1=(%.2lf,%.2lfi)",
a + c, b + d,
a - c, b - d,
((a * c) - (b * d)), (b * c) + (a * d),
((a * c) + (b * d)) / ((c * c) + (d * d)),
((b * c) - (a * d)) / ((c * c) + (d * d)),
a +num,b,
a-num,b,
a*num,b*num,
a/num,b/num,
a+num,b,
num-a,0-b,
num*a,num*b,
((num * a) + (0 * b)) / ((a * a) + (b * b)),
((0 * a) - (num * b)) / ((a * a) + (b * b))
);
return 0;
}
设计一个类CRectangle,要求如下所述: (1) 该类中的私有成员变量存放CRectangle的长和宽,并且设置它们的默认值为1. (2) 通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内。 (3) 求周长Perimeter
输入格式:
输入在一行中给出2个绝对值不超过50的浮点数A和B。
输出格式:
在一行中输出周长的值。
输入样例:
在这里给出一组输入。例如:
25 15
输出样例:
在这里给出相应的输出。例如:
80
WriteUp:
#define _CRT_SECURE_NO_WARINGS
#include<iostream>
using namespace std;
class CRectangle
{
public:
void set_value();
void display();
CRectangle()//构造函数
{
a = 1.0;
b = 1.0;
}
private:
float a, b;
};
void CRectangle::set_value()
{
cin >> a ;
if (a > 50)
{
a = 1.0;
}
cin >> b;
if (b > 50)
{
b = 1.0;
}
}
void CRectangle::display()
{
cout << (a + b) * 2 ;
}
int main()
{
CRectangle c;
c.set_value();
c.display();
return 0;
}
7-2 小H小W爱魔法 (20 分)
这天小H和小W决定去森林看日出,他们来到森林里。走着走着,他们发现了一块发着神秘光芒的石头。他们很迷惑,于是打开淘宝拍照识图,啊妹子啊(Amazing)!,这居然是块魔法石,通过上知网他知道这块石头总是出现在成堆出现,因此附近应该有更多。然后他更深入了。不出所料,他发现了许多魔法石。这些石头排成一排。就在他们准备拿起它的时候,一个神奇的圈子就被触发了。他们呆在原地,石头开始移动。
如上所述,石头排成一排。现在,一些石头移动到该线的一端,而其他石头移动到另一端。除非它们与其他石头碰撞,否则它们不会改变运动方向。碰撞意味着两个石头移动到同一位置,然后两个石头的方向都将改变。无论是否发生碰撞,速度始终为1 m / s。石头到达一端时会消失。
他们知道魔术圈会在t秒后消失。这意味着在t秒钟后,他可以移动,石头将恢复静止状态。这也意味着他们会得到那些石头。他想知道到底能得到多少块魔法石,包括他来到森林时得到的第一枚。
输入格式:
第一行包含三个整数n,L,t(0≤n≤106,2≤L≤109,0≤t≤106)-线上的宝石数为n,线的长度为L计,魔术圈将在t秒后消失。 接下来的n行包含对行中魔石的描述。这些行的第i行包含两个以空格分隔的整数x[i]和d[i],对于i≤n,0<x[i]<L,d[i]∈1,2,代表运动的初始位置和方向(1表示从0到L,2表示从L到0。
输出格式:
输出一个数字,指示小H和小W最终将获得的魔石数量。
输入样例:
在这里给出一组输入。例如:
4 10 6
1 1
5 2
6 1
9 2
输出样例:
在这里给出相应的输出。例如:
3
样例解释
石头是A(1,1),B(5,2),C(6,1),D(9,2)。
1s之后,它们变为A(2,1),B(4,2),C(7,1),D(8,2);
2s之后,它们变为A(3,2),B(3,1),C(7,2),D(8,1);
3s后,它们变为A(2,2),B(4,1),C(6,2),D(9,1);
4s之后,它们变为A(1,2),B(5,2),C(5,1),D到达L并消失;
5s之后,它们变为A达到0并消失,B(4,2),C(6,1),D消失;
6s之后,它们变成A消失,B(3,2),C(7,1),D消失。
小W和小H最终获得第一个B和C。
注:
1,输入保证在一个位置不会有两个魔术石。
2,如果宝石A和宝石B分别位于4和5,并且A的方向是1,B的方向是2。那么下一秒,两块宝石的位置没有变化,但是方向相反 。
WriteUp:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
ll n,L,t,x,d,m;
int main()
{
scanf("%lld%lld%lld",&n,&L,&t);
for(ll i=0;i<n;i++)
{
scanf("%lld%lld",&x,&d);
if(d==1&&L-x<=t) {
m++;
}
if(d==2&&x<=t) {
m++;
}
}
printf("%lld",n+1-m);
return 0;
}
按要求完成下面的程序:
1、定义一个Animal
类,成员包括:
(1)整数类型的私有数据成员m_nWeightBase
,表示Animal
的体重;
(2)整数类型的保护数据成员m_nAgeBase
,表示Animal的年龄;
(3)公有函数成员set_weight
,用指定形参初始化数据成员m_nWeightBase
;
(4)公有成员函数get_weight
,返回数据成员m_nWeightBase
的值;
(5)公有函数成员set_age
,用指定形参初始化数据成员m_nAgeBase
;
2、定义一个Cat
类,私有继承自Animal
类,其成员包括:
(1)string
类型的私有数据成员m_strName
;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化
; (3)公有的成员函数set_print_age
,功能是首先调用基类的成员函数set_age
设置数据成员m_nAgeBase
的值为5,接着输出成员m_strName
的值,然后输出“, age = ”,最后输出基类的数据成员m_nAgeBase
的值。具体输出格式参见main函数和样例输出。
(4)公有的成员函数set_print_weight
,功能是首先调用基类的成员函数set_weight
设置数据成员nWeightBase
的值为6,接着输出成员m_strName
的值,然后输出“, weight = ”,最后调用基类的成员函数get_weight
输出基类的数据成员m_nAgeBase
的值。具体输出格式参见main函数和样例输出。
类和函数接口定义:
参见题目描述。
裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
/* 请在这里填写答案 */
int main()
{
Cat cat("Persian"); //定义派生类对象cat
cat.set_print_age();
cat.set_print_weight(); //派生类对象调用自己的公有函数
return 0;
}
输入样例:
本题无输入。
输出样例:
Persian, age = 5
Persian, weight = 6
WriteUp:
class Animal{
protected:
int m_nAgeBase = 5;// 年龄
int m_nWeightBase = 6;//体重
public:
// void set_weight(int a){
// m_nWeightBase=a;
// }
// void set_age(int b)
// {
// m_nAgeBase=5;
// }
// int get_weight(){
// return m_nWeightBase;
// }
};
class Cat:public Animal
{
private:
string m_strName;
public:
void set_print_age()
{
cout<<m_strName<<", age = "<<m_nAgeBase<<endl;
}
void set_print_weight()
{
cout<<m_strName<<", weight = "<<m_nWeightBase<<endl;
}
Cat(string a)
{m_strName=a;}
};
按要求完成下面的程序:
1、定义一个Animal
类,包含一个void类型的无参的speak
方法,输出“animal language!”。
2、定义一个Cat
类,公有继承自Animal
类,其成员包括:
(1)私有string
类型的成员m_strName
;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数print_name
,无形参,void
类型,功能是输出成员m_strName
的值,具体输出格式参见main函数和样例输出。
类和函数接口定义:
参见题目描述。
裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
/* 请在这里填写答案 */
int main()
{
Cat cat("Persian"); //定义派生类对象
cat.print_name(); //派生类对象使用本类成员函数
cat.speak(); //派生类对象使用基类成员函数
return 0;
}
输入样例:
本题无输入。
输出样例:
cat name: Persian
animal language!
WriteUp:
class Animal{
public:
void speak(){
cout<<"animal language!"<<endl;
}
};
class Cat:public Animal{
public:
string m_name;
void print_name(){
cout<<"cat name: "<<m_name<<endl;
}
Cat(string name){
m_name = name;
}
};
裁判测试程序样例中展示的是一段定义基类People
、派生类Student
以及测试两个类的相关C++代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。
函数接口定义:
提示:
观察类的定义和main方法中的测试代码,补全缺失的代码。
裁判测试程序样例:
注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关函数。
#include <iostream>
using namespace std;
class People{
private:
string id;
string name;
public:
People(string id, string name){
this->id = id;
this->name = name;
}
string getId(){
return this->id;
}
string getName(){
return name;
}
};
class Student : public People{
private:
string sid;
int score;
public:
Student(string id, string name, string sid, int score)
/** 你提交的代码将被嵌在这里(替换此行) **/
}
friend ostream& operator <<(ostream &o, Student &s);
};
ostream& operator <<(ostream &o, Student &s){
o << "(Name:" << s.getName() << "; id:"
<< s.getId() << "; sid:" << s.sid
<< "; score:" << s.score << ")";
return o;
}
int main(){
Student zs("370202X", "Zhang San", "1052102", 96);
cout << zs << endl;
return 0;
}
输入样例:
(无)
输出样例:
(Name:Zhang San; id:370202X; sid:1052102; score:96)
WriteUp:
:People(id,name){
this->sid=sid;
this->score=score;
根据给定的汽车类vehicle(包含的数据成员有车轮个数wheels和车重weight)声明,完成其中成员函数的定义,之后再定义其派生类并完成测试。
小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。
###Vehicle类声明如下:
#include<iostream>
using namespace std;
class Vehicle
{
protected:
int wheels;
float weight;
public:
Vehicle(int wheels,float weight);
int get_wheels();
float get_weight();
float wheel_load();
void show();
};
/* 请在这里填写答案 */
裁判测试程序样例:
int main ()
{
Vehicle v(4,1000);
v.show();
Car car1(4,2000,5);
car1.show ();
return 0;
}
输出样例:
在这里给出相应的输出。例如:
Type:Vehicle
Wheel:4
Weight:1000kg
Type:Car
Type:Vehicle
Wheel:4
Weight:2000kg
Load:5 persons
WriteUp:
Vehicle::Vehicle(int wheels,float weight):wheels(wheels),weight(weight){}
int Vehicle::get_wheels(){return wheels;}
float Vehicle::get_weight(){return weight;}
void Vehicle::show()
{
cout<<"Type:Vehicle"<<endl;
cout<<"Wheel:"<<get_wheels()<<endl;
cout<<"Weight:"<<get_weight()<<"kg"<<endl;
}
class Car:public Vehicle{
private:
int passenger_load;
public:
Car(int a,float b,int c):Vehicle(a,b),passenger_load(c){}
void show()
{
cout<<"Type:Car"<<endl;
cout<<"Type:Vehicle"<<endl;
cout<<"Wheel:"<<get_wheels()<<endl;
cout<<"Weight:"<<get_weight()<<"kg"<<endl;
cout<<"Load:"<<passenger_load<<" persons"<<endl;
}
};
点击数:80
考完了