第五章 继承类:派生类
1.在protected保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。T
2.下列程序的执行结果为 C
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "1"; }
~A() { cout << "2"; }
};
class B: public A {
public:
B() { cout << "3"; }
~B() { cout << "4"; }
};
int main() {
B b;
return 0;
}
A.1234
B.1324
C.1342
D.3142
3.下列关于派生类构造函数和析构函数的说法中,错误的是 D
A. 派生类的构造函数会隐含调用基类的构造函数
B. 如果基类声明了带有形参表的构造函数,则派生类就应当声明构造函数
C. 在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D. 在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
4.建立派生类对象时, 3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为 A
A. abc
B. acb
C. cab
D. cba
5.从shape类派生出一个直角三角形类RTriangle
从shape类派生出一个直角三角形类RTriangle类(regular triangle)。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。
class shape {// 抽象类
public:
virtual double getArea()=0;// 求面积
virtual double getPerimeter()=0; // 求周长};
直角三角形类名:RTriangle
直角三角形类的构造函数原型如下:
RTriangle(double a, double b);
其中 a 和 b 都是直角三角形的两条直角边。
裁判测试程序样例:
#include
#include
using namespace std;
class shape {// 抽象类
public:
virtual double getArea()=0;// 求面积
virtual double getPerimeter()=0; // 求周长
};
//你提交的代码将嵌入到这里
int main()
{
double a,b;
cin>>a>>b;
RTriangle t(a,b);
cout<<t.getArea()<<endl;
cout<<t.getPerimeter()<<endl;
}
输入样例:
在这里填写一组输入
3 4
输出样例:
在这里填写相应的输出
12
12
class RTriangle:public shape {
private:
double height;
double width;
public:
RTriangle(double a, double b){
height = a;
width = b;
}
~RTriangle(){}
double getArea(){
return 0.5 * height * width;
}
double getPerimeter(){
return height + width + sqrt(height * height + width * width);
}
};
6.从shape类派生出一个圆形类Circle
请从下列shape类派生出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造函数。圆周率PI取3.1415926。
class shape {
public:
double getArea(){ return -1; };
double getPerimeter(){ return -1 };
}
圆形类名Circle
裁判测试程序样例:
#include
using namespace std;
class shape {
public:
double getArea(){ return -1 };// 求面积
double getPerimeter(){ return -1 }; // 求周长
};
/* 你提交的代码将被嵌入到这里 */
int main() {
double r;
cin>>r;
Circle c®;
cout<<c.getArea()<<endl;
cout<<c.getPerimeter()<<endl;
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里填写一组输入
2.78
输出样例:
在这里填写相应的输出
24.2795
17.4673
const double PI = 3.1415926;
class Circle:public shape {
private:
double r;
public:
Circle(double radius) {
r = radius;
}
double getArea() {
return PI * r * r;
}
double getPerimeter()
{
return 2 * PI * r;
}
};
7.计算圆柱体的表面积(函数名隐藏)
Cylinder类是Circle类的派生类,在下面的程序中计算并输出了圆柱体的表面积。请阅读理解下面的程序。将下面的Cylinder类补充完整后提交。
Cylinder类的定义:
class Cylinder :public Circle{
double height;
public:
…
};
你提交的Cylinder类的定义将嵌入到下面的程序中:
#include
using namespace std;
const double PI=3.1415926;
class Circle{
protected:
double radius;
public:
Circle(double r){
radius=r;
}
double getArea(){
return PIradiusradius;
}
};
// 你提交的代码将嵌入在这里
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 radius,double h):Circle(radius) {
height = h;
}
~Cylinder(){}
double getArea(){
return PI * radius * radius * 2 + height * PI * radius * 2;
}
};
8.狗的继承
完成两个类,一个类Animal,表示动物类,有一个成员表示年龄。一个类Dog,继承自Animal,有一个新的数据成员表示颜色,合理设计这两个类,使得测试程序可以运行并得到正确的结果。
函数接口定义:
按照要求实现类
裁判测试程序样例:
/* 请在这里填写答案 */
int main(){
Animal ani(5);
cout<<“age of ani:”<<ani.getAge()<<endl;
Dog dog(5,“black”);
cout<<“infor of dog:”<<endl;
dog.showInfor();
}
输入样例:
无
输出样例:
age of ani:5
infor of dog:
age:5
color:black
#include<iostream>
#include<cstring>
using namespace std;
class Animal
{
protected:
int age;
public:
Animal(int age1) {
age = age1;
}
~Animal(){}
int getAge() {
return age;
}
};
class Dog:public Animal{
private:
char color[10];
int age1;
public:
Dog(int age1, char color1[]):Animal(age1)
{
age = age1;
strcpy(color, color1);
}
~Dog(){};
void showInfor()
{
cout << "age:" << getAge() << endl;
cout << "color:" << color << endl;
}
};
9.面向对象程序设计的继承性鼓励程序员重用被实践验证的高质量软件。T
10.一个类的私有成员 B
A. 只能被该类的成员函数访问
B. 只能被该类的成员函数和友元函数访问
C. 只能被该类的成员函数、友元函数和派生类访问
D. 以上答案都不对
11.在公有继承的情况下,在派生类中能够访问的基类成员包括 D
A. 公有成员
B. 保护成员
C. 公有成员、保护成员和私有成员
D. 公有成员和保护成员
12.派生类继承基类的方式有 D
A. public
B. private
C. protected
D. 以上都对
13.假设在公有派生情况下,以下说法不正确的是 A
A. 可以将基类对象复制给派生类对象
B. 可以将派生类对象的地址复制给基类指针
C. 可以将派生类对象赋值给基类的引用
D. 可以将派生类对象赋值给基类对象
14.从shape类派生出一个正六边形类RHexagon
从下列的抽象类shape类派生出一个正六边形(regular hexagon)RHexagon类。RHexagon类将正六边形的边长作为私有成员,类中包含初始化这个值的构造函数。
class shape {// 抽象类
public:
virtual double getArea()=0;// 求面积
virtual double getPerimeter()=0; // 求周长};
正六边形类名:
RHexagon
裁判测试程序样例:
#include
#include
using namespace std;
class shape {// 抽象类
public:
virtual double getArea()=0;// 求面积
virtual double getPerimeter()=0; // 求周长
};
//你提交的代码将嵌入到这里
int main()
{
double s;
cin>>s;
RHexagon p(s);
cout<<p.getArea()<<endl;
cout<<p.getPerimeter()<<endl;
}
输入样例:
16.8
输出样例:
733.281
100.8
class RHexagon:public shape {
private :
double length;
public:
RHexagon(double r):length(r){
}
double getArea(){
return 3*sqrt(3)*length*length/2;
}
double getPerimeter(){
return 6*length;
}
};
15.求平面几何形状的面积(圆形和矩形)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®; 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:public Shape {
private:
double radius;
public:
Circle(double r):radius(r) {
}
double area(){
return 3.14 * radius * radius;
}
};
class Rectangle:public Shape {
private:
double width;
double length;
public:
Rectangle(double w, double l):width(w), length(l) {
}
double area(){
return width * length;
}
};
16.学生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;//c