HZAU-专业C++作业14(继承与多态性)
判断题
窗体顶端
1. 派生类的构造函数的初始化列表中如果不写对基类构造函数的调用,则自动调用基类的拷贝构造函数。f | |
2. 在多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。T | True False |
3. 一个派生类不能作为基类被别的派生类继承。F | True False |
4. 派生类的继承方式中有两种:公有继承和私有继承。F | True False |
5. 在私有继承中,基类中只有公有成员对派生类是可见的。F | True False |
6. 构造函数可以被继承。F | True False |
7. 在公有继承中,基类的成员在派生类中都可以直接使用。F | True False |
8. 解决多继承下二义性问题的方法之一是使用作用域运算符。T | True False |
9. 派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问。T | True False |
10. 虚函数是支持编译时的多态性。T | True False |
11. 在C++中,要实现动态联编,可以使用基类指针调用虚函数。 t | True False |
12. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值部分相同。 f | True False |
13. 抽象类只能作为基类使用,其纯虚函数的实现由派生类来完成。 t | True False |
14. 运算符重载只可以是类的成员函数和友元函数,不可以是普通函数。t | True False |
15. 静态联编和动态联编都是在编译时进行的,二者的区别仅是前者对非虚函数,后者对虚函数。t | True False |
16. 动态联编指的是在运行期间来选择不同类的虚函数t。 | True False |
17. 一个抽象类中可以包含有多个纯虚函数,一个派生类中也可以包含多个虚函数。 t | True False |
18. 如果派生类没有实现虚函数,那么它将使用他的基类的虚函数。t | True False |
19. 含有纯虚函数的类称为抽象类,与抽象类相对应的是具体类。t | True False |
20. 析构函数可以说明为虚函数,而构造函数说明为虚函数没有意义t。 | True False |
选择题
窗体顶端
多态性与虚函数1.
C++语言建立类族是通过( )实现的。
A. 类的嵌套 B. 虚函数 C. 类的继承 D. 抽象类
2.
下列对基类和派生类关系的描述中,错误的是( )。
A. 派生类是基类的具体化 B. 派生类是基类的子集 C. 派生类是基类定义的延续 D. 派生类是基类的组合
3.
下列对派生类的描述中,错误的是( )。
A. 一个派生类可以作为另一个派生类的基类
B. 派生类至少有一个基类
C. 派生类的缺省继承方式是private
D. 派生类只继承了基类的公有成员和保护成员
4.
B. 派生类至少有一个基类
C. 派生类的缺省继承方式是private
D. 派生类只继承了基类的公有成员和保护成员
4.
下列说法中错误的是( )。
A. 公有继承时基类中的public成员在派生类中仍是public的
B. 公有继承时基类中的private成员在派生类中仍是private的
C. 私有继承时基类中的public成员在派生类中是private的
D. 保护继承时基类中的public成员在派生类中是protected的
5.
B. 公有继承时基类中的private成员在派生类中仍是private的
C. 私有继承时基类中的public成员在派生类中是private的
D. 保护继承时基类中的public成员在派生类中是protected的
5.
下面叙述错误的是( )。
A. 对基类成员的访问能力在private派生类中和public派生类中是相同的
B. 基类的private成员在public派生类中不可访问
C. 基类中的public成员在protected派生类中是protected的
D. 基类中的public成员在protected派生类中仍然是public的
6.
C. 基类中的public成员在protected派生类中是protected的
D. 基类中的public成员在protected派生类中仍然是public的
6.
多继承的构造顺序可分为如下4步。
① 所有非虚基类的构造函数按照它们被继承的顺序构造;
②所有虚基类的构造函数按照它们被继承的顺序构造;
③ 所有子对象的构造函数按照它们声明的顺序构造;
④ 派生类自己的构造函数体;
这4个步骤的正确顺序是( )。
A. ④③①② B. ②④③① C. ②①③④ D. ③④①②
7.
下列虚基类的声明中,正确的是( )。
A. class virtual B: public A
B. virtual class B: public A
C. class B: public A virtual
D. class B: virtual class A
8.
B. virtual class B: public A
C. class B: public A virtual
D. class B: virtual class A
8.
下面( )的叙述不符合赋值兼容规则。
A. 派生类的对象可以赋值给基类的对象
B. 基类的对象可以赋值给派生类的对象
C. 派生类的对象可以初始化基类的引用
D. 派生类的对象的地址可以赋值给指向基类的指针
9.
B. 基类的对象可以赋值给派生类的对象
C. 派生类的对象可以初始化基类的引用
D. 派生类的对象的地址可以赋值给指向基类的指针
9.
对于虚函数定义的调用( )。
A. 一定使用动态联编 B. 一定使用静态联编 C. 必须使用动态联编 D. 不一定使用动态联编
10.
下列描述中,( )是抽象类的特征。
A. 可以说明虚函数 B. 可以定义友元函数 C. 可以进行构造函数 D. 不能说明其对象
11.
关于纯虚函数和抽象类的描述中,错误的是( )。
A. 纯虚函数是一种特殊的虚函数,它没有具体的实现
B. 抽象类是指具有纯虚函数的类
C. 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
12.
B. 抽象类是指具有纯虚函数的类
C. 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
12.
如果一个类至少有一个纯虚函数,那么就称该类为( )。
A. 抽象类 B. 虚基类 C. 派生类 D. 以上都不对
13.
以下( )成员函数表示纯虚函数。
A. virtual int vf(int); B. void vf(int)=0; C. virtual void vf()=0; D. virtual void vf(int) { }
14.
一个类的层次结构中,定义有虚函数,并且都是公有继承,在下列情况下,实现动态联编的是( )。
A. 使用类的对象调用虚函数
B. 使用类名限定调用虚函数,其格式如下:<类名>::<虚函数名>
C. 使用构造函数调用虚函数
D. 使用成员函数调用虚函数
B. 使用类名限定调用虚函数,其格式如下:<类名>::<虚函数名>
C. 使用构造函数调用虚函数
D. 使用成员函数调用虚函数
15.
下列关于动态联编的描述中,错误的是( )。
A. 动态联编是函数联编的一种方式,它是在运行时来选择联编函数的
B. 动态联编又可称为动态多态性,它是C++语言中多态性的一种重要形式
C. 函数重载和运算符重载都属于动态联编
D. 动态联编只是用来选择虚函数的
B. 动态联编又可称为动态多态性,它是C++语言中多态性的一种重要形式
C. 函数重载和运算符重载都属于动态联编
D. 动态联编只是用来选择虚函数的
程序设计题
1. (5分)
点-圆类(虚函数)
题目描述
下面是点-圆类层次继承中的虚函数,请填空补充完成下列程序。
#include<iostream>
using namespace std;
class Point
{
float x,y;
public:
Point(){}
Point( (1) ){x=a;y=b;}
(2) double area()
{
return 0.0;
}
};
#include<iostream>
using namespace std;
class Point
{
float x,y;
public:
Point(){}
Point( (1) ){x=a;y=b;}
(2) double area()
{
return 0.0;
}
};
( 3 )double Pi=3.141593;
class Circle:public Point
{
private:
double Radius;
public:
Circle(double r)
{
(4) ;
}
virtual double area()
{
return Pi*Radius*Radius;
}
};
int main()
{
Circle c(1);
cout<<c.area();
return 0;
}
};
int main()
{
Circle c(1);
cout<<c.area();
return 0;
}
输入描述
无
输出描述
略
输入样例
无
输出样例
3.14159
窗体底端
2. (5分)
时间类相加
题目描述
下面是将加法运算符(+)重载为友元函数的应用,该运算符实现时间类的加法运算,请完成下列程序。
#include<iostream>
using namespace std;
class angle
{
(1)hours,mins,secs;
public:
angle(){}
(2)(int h,int m,int s)
{
hours=h;mins=m;secs=s;
}
void show()
#include<iostream>
using namespace std;
class angle
{
(1)hours,mins,secs;
public:
angle(){}
(2)(int h,int m,int s)
{
hours=h;mins=m;secs=s;
}
void show()
{
cout<<"time is: "<<hours<<":"<<mins<<":"<<secs<<endl;
}
(3) angle operator+(angle &p1,angle &p2)
{
angle temp;
temp.secs=(p1.secs+p2.secs)%60;
temp.mins=((p1.secs+p2.secs)/60+p1.mins+p2.mins)%60;
temp.hours=((p1.secs+p2.secs)/60+p1.mins+p2.mins)/60;
(4) ;
return temp;
}
};
int main()
{
cout<<"time is: "<<hours<<":"<<mins<<":"<<secs<<endl;
}
(3) angle operator+(angle &p1,angle &p2)
{
angle temp;
temp.secs=(p1.secs+p2.secs)%60;
temp.mins=((p1.secs+p2.secs)/60+p1.mins+p2.mins)%60;
temp.hours=((p1.secs+p2.secs)/60+p1.mins+p2.mins)/60;
(4) ;
return temp;
}
};
int main()
{
angle a(12,2,53),b(15,2,54);
a=a+b;
a.show();
return 0;
}
a=a+b;
a.show();
return 0;
}
输入描述
无
输出描述
略
输入样例
无
输出样例
time is: 3:5:47
窗体顶端
窗体底端
3. (5分)
虚函数实现多态性
题目描述
下面程序是虚函数实现多态性,请完成下列程序。
#include<iostream>
using namespace std;
(1) pet
{
public:
(2)void speak(){cout<<"how does a pet speak?"<<endl;}
};
class cat:public pet
{
public:
virtual void speak(){cout<<"miao!miao!"<<endl;}
};
#include<iostream>
using namespace std;
(1) pet
{
public:
(2)void speak(){cout<<"how does a pet speak?"<<endl;}
};
class cat:public pet
{
public:
virtual void speak(){cout<<"miao!miao!"<<endl;}
};
class dog:public pet
{
public:
virtual (3) speak(){cout<<"wang!wang!"<<endl;}
};
int main()
{
pet p;
p.speak();
cat c;
c.speak();
dog d;
d.speak();
return 0;
}
{
public:
virtual (3) speak(){cout<<"wang!wang!"<<endl;}
};
int main()
{
pet p;
p.speak();
cat c;
c.speak();
dog d;
d.speak();
return 0;
}
输入描述
无
输出描述
略
输入样例
无
输出样例
how does a pet speak?
miao!miao!
wang!wang!
窗体顶端
窗体底端
4. (3分)
继承-虚函数
题目描述
在下面程序的横线处填上适当的内容,使程序执行后的输出结果为9SS9S。
#include<iostream>
#include<iostream>
using namespace std;
class A
{
(1) a;
public:
A():a(9){}
(2) void print() const{cout<<a;}
};
class B:public A
{
char b;
public:
B(){ (3);}
void print()const{cout<<b;}
class A
{
(1) a;
public:
A():a(9){}
(2) void print() const{cout<<a;}
};
class B:public A
{
char b;
public:
B(){ (3);}
void print()const{cout<<b;}
};
void show(A&x){x.print();}
int main()
{
A d1,*p;
B d2;
(4) ;
d1.print();
d2.print();
p->print();
show(d1);
show(d2);
return 0;
}
void show(A&x){x.print();}
int main()
{
A d1,*p;
B d2;
(4) ;
d1.print();
d2.print();
p->print();
show(d1);
show(d2);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论