判断题
(部分)
2.在protected保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。(T)
选择题
1.一个类的私有成员(B)
A.只能被该类的成员函数访问
B.只能被该类的成员函数和友元函数访问
C.只能被该类的成员函数、友元函数和派生类访问
D.以上答案都不对
3.在公有继承的情况下,在派生类中能够访问的基类成员包括(D)
A.公有成员
B.保护成员
C.公有成员、保护成员和私有成员
D.公有成员和保护成员
6.假设在公有派生情况下,以下说法不正确的是(C)
A.可以将基类对象复制给派生类对象
B.可以将派生类对象的地址复制给基类指针
C.可以将派生类对象赋值给基类的引用
// 初始化
D.可以将派生类对象赋值给基类对象
在共有继承时:
1.可以用派生类对象给基类对象赋值。
2.可以用派生类的对象初始化基类对象的引用。
3.可以用派生类对象的地址给基类对象的指针赋值。
// 相当于B.“可以将派生类对象的地址赋值给基类指针”
3.以下关于C++语言中继承的叙述中,错误的是( )。(D)
//****
A.继承是父类和子类之间共享数据和方法的机制
B.继承定义了一种类与类之间的关系
C.继承关系中的子类将拥有父类的全部属性和方法
D.继承仅仅允许单继承,即不允许一个子类有多个父类
4.下列关于类的继承描述中,( )是正确的。(D)
A.派生类公有继承基类时,可以访问基类的所有数据成员,调用所有成员函数。
B.派生类也是基类,所以它们是等价的。
C.派生类对象不会建立基类的私有数据成员,所以不能访问基类的私有数据成员。
D.一个基类可以有多个派生类,一个派生类可以有多个基类。
函数题
1.求平面几何形状的面积(圆形和矩形)C++
下列shape类是一个表示形状的基类,该类有一个计算形状面积的方法area( )。请以形状类"Shape"为基类派生出圆形类"Circle"和矩形类"Rectangle",要求保持求面积的接口不变。从键盘输入圆形的半径和矩形的长和宽,在主函数中创建一个圆形类"Circle"的对象和一个矩形类"Rectangle"的对象,计算并输出这个圆形和矩形的面积。圆周率PI=3.14
class shape{
public:
double area( ){ }
};
圆形类名:Circle 注意:圆周率PI=3.14
矩形类名:Rectangle
裁判测试程序样例:
#include <iostream>
using namespace std;
class Shape{
public:
double area ( ){ return -1; }
};
//你提交的代码将嵌入到这里。
int main()
{
double r,h,w;
cin>>r>>h>>w;
Circle c(r); Rectangle rect(h,w);
cout<<"The area of the Circle is "<<c.area( )<<endl;
cout<<"The area of the Rectangle is "<<rect.area( )<<endl;
return 0;
}
输入样例:
8.8
16.8 9.8
输出样例:
The area of the Circle is 243.162
The area of the Rectangle is 164.64
//没有用到继承,与输出样例相同
class Circle
{
private:
double r;
public:
Circle(double r1){r = r1;}
double area(){return 3.14*r*r;}
};
class Rectangle
{
private:
double h,w;
public:
Rectangle(double h1,double w1){h=h1;w=w1;}
double area(){return h*w;}
};
2.写出派生类构造方法
裁判测试程序样例中展示的是一段定义基类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)
// 这个不是我自己写的
: People(id,name){
this->sid = sid;
this->score = score;
}
string getsid() {
return this->sid;
}
int getscore() {
return this->score;
3.计算圆柱体的表面积(函数名隐藏)
Cylinder类是Circle类的派生类,在下面的程序中计算并输出了圆柱体的表面积。请阅读理解下面的程序。将下面的Cylinder类补充完整后提交。
Cylinder类的定义:
class Cylinder :public Circle{
double height;
public:
......
};
你提交的Cylinder类的定义将嵌入到下面的程序中:
#include <iostream>
using namespace std;
const double PI=3.1415926;
class Circle{
protected:
double radius;
public:
Circle(double r){
radius=r;
}
double getArea(){
return PI*radius*radius;
}
};
// 你提交的代码将嵌入在这里
int main()
{
double r,h;
cin>>r>>h;
Cylinder Cy1(r,h) ;
cout<<Cy1.getArea()<<endl;
return 0;
}
输入样例:
3.5 4.2
输出样例:
106.369
class Cylinder :public Circle{
double height;
public:
Cylinder(double r,double h):Circle(r)
{
this->height = h;
}
double getArea()
{
return Circle::getArea()*2+2*radius*height;
}
};
编程题
1.学生CPP成绩计算
给出下面的人员基类框架:
class Person {
protected:
string name;
int age;
public:
Person();
Person (string p_name, int p_age);
void display () {cout<<name<<“:”<<age<<endl;}
};
建立一个派生类student,增加以下成员数据:
int ID;//学号
float cpp_score;//cpp上机成绩
float cpp_count;//cpp上机考勤
float cpp_grade;//cpp总评成绩
//总评成绩计算规则:cpp_grade = cpp_score * 0.9 + cpp_count * 2;
增加以下成员函数:
student类的无参构造函数
student类的参数化构造函数//注意cpp_grade为上机成绩和考勤的计算结果
void print()//输出当前student的信息
//其中cpp_grade输出保留一位小数
//输出格式为ID name cpp_grade
生成上述类并编写主函数,根据输入的学生基本信息,建立一个学生对象,计算其cpp总评成绩,并输出其学号、姓名、总评成绩。
输入格式: 测试输入包含若干测试用例,每个测试用例占一行(学生姓名 学号 年龄 cpp成绩 cpp考勤)。当读入0时输入结束,相应的结果不要输出。
输入样例:
Bob 10001 18 75.5 4
Mike 10005 17 95.0 5
0
输出样例:
10001 Bob 75.9
10005 Mike 95.5
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
class Person {
protected:
string name;
int age;
public:
Person();
Person (string p_name, int p_age)
{
this->name=p_name;
this->age=p_age;
}
void display () {cout<<name<<":"<<age<<endl;}
};
class Student:public Person{
private:
int ID;
float cpp_score;
float cpp_count;
float cpp_grade;
public:
Student(string name,int id,int age,float score,float count):Person(name,age)
{
this->ID=id;
this->cpp_score=score;
this->cpp_count=count;
this->cpp_grade=this->cpp_score*0.9+this->cpp_count*2;
}
void print()
{
cout<<ID<<" "<<name<<" ";
printf("%.1lf\n",cpp_grade);
}
};
int main()
{
string name;
int id,age;
float score,count;
cin>>name;
while(name!="0")
{
cin>>id>>age>>score>>count;
Student s(name,id,age,score,count);
s.print();
cin>>name;
}
return 0;
}