admin 管理员组文章数量: 1087139
2024年4月22日发(作者:nosql数据库的特点)
D. 对象之间的信息传递是通过消息进行的
答案:A
解析: A对象在C++中才有,包括数据和操作两项,而C中的变量只有数据,
没有操作。所
以A项错误。
18. 派生类的构造函数的成员初始化列表中,不能包含()
A. 基类的构造函数
B. 基类的对象初始化
C. 派生类对象的初始化
D. 派生类中一般数据成员的初始化
答案:C
解析:派生类的构造函数的成员初始化,包括基类成员、基类对象成员和派生
类成员。因
为本身就是初始化定义的对象,在构造函数中再进行该类对象的初始化产生了
循环定义,或者类
中不能包括本身类的成员对象。所以选择C项。
19. 关于new运算符的下列描述中,错误的是()
A. 它可以用来动态创建对象和对象数组
B. 使用它创建的对象或对象数组可以使用运算符delete删除
C. 使用它创建对象时要调用构造函数
D. 使用它创建对象数组时必须指定初始值
答案:D
解析: new创建的对象数组不能指定初始值,所以调用无参的构造函数,选择
D项。
20. 假定一个类的构造函数为A(int aa,int bb){a=aa++;b=a*++bb;},则执
行A x(4,5);语句
后,x.a和x.b的值分别为()
A. 4和5
B. 4和20
C. 4和24
D. 20和5
答案:C
解析:执行构造函数将数据成员进行赋值,aa++是后加,先赋值a=4,++bb,bb
变量值先自
加为6,再与a相乘,所以b=24。
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填
上正确答
案。错填、不填均无分。
1. 在C++中,编译指令都是以___(符号)开始。
答案:#
C++的源程序可包括各种编译指令,以指示编译器对源代码进行编译之前先对
其进行预处理。所
有的编译指令都以#开始,每条指令单独占用一行,同一行不能有其他编译指
令和C++语句(注释
例外)
2. 在函数前面用___保留字修饰时,则表示该函数表为内联函数。
答案: inline
[解析]内联函数,用来提高程序运行速度。在类内部定义的函数也是内联函
数。
3. 执行下列程序
int a=21,j=16;
(ios::hex);
cout< (ios::hex); cout< 程序的输出结果是___。 答案: 1516 [解析]a=21以十六进制输出,j=16以十进制输出。 4. 在单继承和多继承方式中,面向对象的程序设计应尽量使用___继承。 答案:单 [解析]多继承是单继承的扩展,且多继承易产生二义性等问题。 5. 函数模板中紧随template之后尖括号内的类型参数都要冠以保留字___。 答案: class [解析]类模板的使用。template T1,class T2,...,class Tn> 6. 在C++中,访问指针所指向的对象的成员使用___运算符。 答案:->或. [解析]使用指针访问成员有两种方法:成员运算符“.”或指向运算符“.”。 7. 定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其 进行初始化。 答案:无参 [解析]使用new创建对象数组,调用无参构造函数。 8. 局部对象和全局对象中,在同一程序中___生存期最长。 答案:全局对象 变量或对象的生命期或者作用域的不同,全局对象生命期长。 9. this指针始终指向调用成员函数的___。 答案:对象 this指针是隐藏的指针,它指向调用函数的对象。 10. 派生类的主要用途是可以定义其基类中___。 答案:不具有的成员 [解析]继承的特点,扩充基类,即在派生类中增加基类不具有的成员。 11. 在用class定义一个类时,数据成员和成员函数的默认访问权限是___。 答案: private [解析]定义类时的成员默认为私有,而结构体则是公有。 12. 使用new为int数组动态分配10个存储空间是___。 答案: new int[10]; [解析]new delete动态开辟空间和删除空间。new int[10],注意不要写 成new int(10),使用小括号只能开辟一个空间,使用10来初始化该值。 13. 类模板用来表达具有___的模板类对象集。 答案:相同处理方法 [解析]模板特点是不同的数据具有相同的处理方法的抽象。 14. 如果通过同一个基类派生一系列的类,则将这些类总称为___。 答案:类族 [解析]单继承方式派生的众多的类。 15. 面向对象的四个基本特性是多态性、继承性、和封装性___。 答案:抽象 [解析]考察面向对象的四个特征。程序由一组抽象的对象组成,一组对象的 共同特征抽象出类 的概念,类是对象的抽象,对象是类的实例。封装即将数据和操作紧密结合提 供访问的接口,外 部通过接口实现访问数据,提供安全性。继承继承解决了类的扩展性。多态性 不同对象调用相同 的函数名,但调用不同的函数,实现不同的功能,解决了接口统一的问题。 16. 所有模板都是以___关键字和一个形参表开头的。 答案: template [解析]类模板,函数模板都要使用template这一关键字。 17. 在C++语言中,访问一个对象的成员所用的成员运算符是___。 答案:. [解析]成员运算符“.”,如果是指针可以使用“->”。 18. 开发一个C++语言程序的步骤通常包括编辑、___、连接、运行和调试。 答案:编译 [解析]vc开发过程,要经过编辑、编译、连接和运行四个步骤,与其它高级 语言相同。 19. 执行下列代码 string str("HelloC++"); cout<<(5,3); 程序的输出结果是___。 答案: C++ [解析]substr取子字符串,第1个参数表示要截取子串在字符串中的位置, 第2个表示取多少个 字符。 20. 定义___函数时,应在参数个数或参数类型上有所不同。 答案:重载 [解析]重载函数要求同名函数具有相同的功能,而只能是函数类型、参数个 数或参数顺序不同 。系统将根据同名函数的这些不同之处来选择其对应的实现。 三、改错题(本大题共5小题,每小题4分,共20分) 1. #include #include #include using namespace std; class A {public: A(const char *na){strcpy(name,na);} private: char name[80]; }; class B:public A { public: B(const char *nm):A(nm){} void show(); }; void B::show() { cout<<"name:"< } void main() { B b1("B"); (); } 答案:private:因为name如果是私有的,在派生类中无法访问,而基类没有提 供成员函数来访问 name,所以更改name访问权限为公有或保护,这样对于派生类来说是透明的。 [修改]public:或protected: 2. 下面的程序有错误,请修改。 #include class A {private: int a; public: void func(B &); A(int i){a=i;} }; class B {private: int b; friend void A::func(B &); public: B(int i){b=i;} }; void A::func(B& r) {a=r.b; cout< } void main() { B bt(3); A at(10); (bt); } 答案:[修改]class B; class A [解析]class A类A中使用B类中的成员增加对B声明。 3. #include class Test {private: int x,y=20; public: Test(int i,int j){x=i,y=j;} int getx(){return x;} int gety(){return y;} }; void main() {Test mt(10,20); cout<<()< cout<<()< } 答案:int x,y=20;在类内部不能对数据成员直接赋值。 [修改]int x,y; 4. #include class A {private: int x,y; public: void fun(int i,int j) {x=i;y=j;} void show() {cout< }; void main() {A a1; (2); (); } 答案:void fun(int i,int j)调用时有一个参数,形参有两个,可以使第二 个带默认值。 [修改]void fun(int i,int j=0) 5. #include class A {private: int x; protected: int y; public: A(int i,int j){x=i;y=j;} }; class B:public A {public: B(int a,int b):A(a,b){} void show(){cout< }; void main() {B b(8,9); (); } 答案:private:在基类中是私有成员,即使采用公有派生,但在派生类无法访 问。 [修改]public:或protected: 四、完成程序题(本大题共5小题,每小题4分,共20分) 1. 完成下面类中成员函数的定义。 #include class vehicle {protected: int size; int speed; public: void set(int s){speed=s;} _____get(){return speed/10;} }; class car:public vehicle { public: int get(){return speed;} }; class truck:public vehicle { public: int get(){return speed/2;} }; int max(______) { if(()>()) return 1; else return 2; } void main() { truck t; car c; (160); (80); cout< } 答案:virtual int,vehicle &v1,vehicle &v2 [解析]在基类和派生类都有get函数,输出结果是2,只有当这两个不同类型 的对象,调用 不同类的get函数,才能使结果为2,这就是多态性。所以将基类get定义为虚 函数。max函数使用 基类对象的引用的方法来实现。 2. 完成下面类中成员函数的定义。 #include #include using namespace std; class str {private: char *st; public: str(char *a) {set(a); } str & operator=(____) {delete st; set(); return *this; } void show(){cout< ~str(){delete st;} void set(char *s)//初始化st {_____ strcpy(st,s); } }; void main() {str s1("he"),s2("she"); (),(); s2=s1; (),();} 答案:str &a,st=new char[strlen(s)+1]; [解析]对“=”运算符进行重载,调用时s2=s1,都是对象,所以形参使用对 象的引用,不 要使用对象作为形参(产生临时对象)。使用strcpy进行字符的复制,st必须 有一定的空间,空 间是strlen(s)+1(‘\0’作为结束符,strlen得到的长度不包括结束符)。 3. 下面程序段用来求三角形的面积,首先判断三边不符合组成三角形时,返 回-1,符合时输 出三角形面积。 #include #include double area(double a,double b,double c) {if(____) return -1; else { double ar,l; l=(a+b+c)/2; ar=sqrt(l*(l-a)*(l-b)*(l-c)); return ar; } } void main() {double i=0,j=0,k=0; cout<<"输入三角形三边:"; cin>>i>>j>>k; double s=area(i,j,k); if(s<0) cout<<"不是三角形"< else ______ } 答案:a+b>c||a+c>b||b+c>a,cout< [解析]三角形组成规则:两边之和大于第三边。s<0不是三角形,是则输出s。 4. 在下面程序横线处填上适当内容,使程序执行结果为: S=2 S=5 S=9 #include void sum(int i) {static int s; _________; cout<<"s="< } void main (void) {int i; for (i=0;________) sum(i); } 答案:s=s+i+2;,i<3,i++ [解析]根据结果和调用形式,得出规律。注意静态成员能保留上次运行的结 果。循环了3次 ,退出循环的条件。 5. 下面是一个三角形三边,输出其面积C++程序,在下划线处填上正确的语 句。 #include #include void area() {double a,b,c; cout<<"Input a b c:"; ________ if(a+b>c&&a+c>b&&c+b>a) {double l=(a+b+c)/2; _______ cout<<"The area is:"< } else cout<<"Error"< } void main() {area();} 答案:cin>>a>>b>>c;,double s=sqrt(l*(l-a)*(l-b)*(l-c)); [解析]输入三个边的长度,由公式得出三角形的面积double s=sqrt(l*(l-a)*(l-b)*(l-c)); 五、程序分析题(本大题共2小题,每小题5分,共10分) 1. 给出下面程序输出结果。 #include class example {int a; public: example(int b=5){a=b++;} void print(){a=a+1;cout < void print()const
版权声明:本文标题:C++试题及答案(含解析) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713785118a651407.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论