一、选择题1.在下列有关析构函数的描述中,错误的是(B)A.一个类中只能定义一个析构函数 B.析构函数名与类名完全相同C.析构函数不能指定返回类型 D.析构函数不能带有参数2.面向对象的软件工程不包括以下哪个部分(D)A.面向对象程序设计 B.面向对象编程C.面向对象维护 D.面向对象封装3.假设定义了函数模版:Template <class T>T max(Tx,Ty) {return (x>y)? x:y;}并定义了:int i;char c;那么下列错误的调用该模版的事(C)A.max (i,i) B.max(c,c) C.max(int(c),i) D.max(c,i)4.模版的主要作用是为了(C)A.提高代码的运行效率 B.实现多态性C.提高代码的重要性 D.加强类的封装性5.#include <iostream>#include <iomanip>using namespace std;{double x=111.222222222222222;cout<<setiosflags(ios::scientific)<<setprecision(5)<<x<<endl;return 0;}以上程序的运行结果是(C)A.111.22 B.111.22222 C.1.11222e+002 D.1.11222E+002 6.下列特性中不是面向对象程序设计语言所特有的是(D)。
(A)数据封装(B)继承(C)多态性(D)模板7.类成员的访问权限中,(C)只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected8.派生类可以访问其基类的(D)(A)公有成员(B)保护成员(C)私有派生(D)共有和保护成员9.c++中声明常量的关键字是(A)。
(A)const (B)extern (C)public(D)enum10.应在下列程序划线处填入的正确语句是(C)#include<iostream.h>{public:void fun (){cout<<”Base::fun”<<ENDL;}};Class Derived:public Base{void fun (){__________________________ //显示调用基类的函数fun()Cout<<”Derived::fun”<<ENDL;}};(A)fun(); (B)Base.fun(); (C)Base::fun();(D)Base->fun();11.下面有关类的叙述中,不正确的是(C)。
A.类是一种自定义的数据类型B.在类中,缺省的访问权限是私有的C.只有类的成员函数才能访问类中的私有成员D.任何结构体都可改写为类12.下面关于成员函数的叙述中,(A)是不正确的。
A.成员函数一定是内联函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的13.以下有关析够函数的叙述不正确的是(B)。
A.一个类只能定义一个析构函数B.析构函数和构造函数一样可以有形参C.析构函数不允许有返回值D.析构函数名前必须冠有符号“~”14.以下运算符不能进行重载的是(A)。
A.?:B.&&C.)^D.[ ]15.当使用ifstreaml流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式是(A)。
A.ios::inB.ios::outC.ios::trunkD.ios::binary16.下列关于C++标识符的命名不合法的是(C )A.PadB. nameC. A#beD. _a1217.对重载函数行参的描述类型是(D )A.参数的个数可能不同B.参数的类型可能不同C.参数的顺序可能不同D.参数的个数,类型,顺序都相同,只是函数的返回值不同18.以下能正确定义数组并正确赋初值的语句是(D )A.int N=5,b[N] [N];B.int a[2]={ {1}, {3}, {4}, {5} };C.int c[2] []={ {1,2}, {3,4} };D.int d[3] [2]={ {1,2},{3,4} };19.下面程序的运行结果为(C)#include <iostream.h>int add(int a,int b);void main(){extern int x,y;cout<<add(x,y)<<endl;}int x=20,y=5;int add(int a,int b){int s=a+b;return s;}A.20B.5C.25D.编译会提示出错信息20.虚函数的定义是在基类中进行的,定义时需要冠以关键字(C)A.strstreamB. ostrstreamC. ofstreamD.istrstream二、填空题1.在C++中,变量的引用就是变量的别名,因此引用又称为___别名________2.在C++语言中,二维数组元素在内存中的存放顺序是__________(按行存储)3.格式输出有两种方法:_使用控制符__使用流对象的有关成员函数4.函数重载是指_两个或两个以上的函数取相同的函数名,但形参的个数或类型不同____5.挪用数组名作为函数调用的实参,传递给形参的是___ 数组的首地址6.如果一个类中至少有一个纯虚函数,则称该类为抽象类。
7.在c++类中可以包含公有,私有和保护三种具有不同访问控制权的成员。
8.c++类的组成包括数据成员和成员函数,友元不是(是,不是)该类的成员函数。
9.new的功能是动态申请内存空间,delete的功能是释放由new申请的空间。
10.若有:int i;int &j=i;i=10;j=i+1;则i=11,j=11。
11.执行语句cout<<“x86\082\n”;后,输出结果为______。
(x86)12.用new运算符申请动态对象时,系统将自动调用该对象的_______。
(构造函数)13.定义内联函数的方法是在函数的返回值类型之前增加关键字_______。
(inline)14.对象的_____成员不带有this指针。
(静态)15.在C++编译系统的I/O流类库中,预定义了四个标准流,即________________。
(cin,cout,cerr和clog)16.函数重载时,编译系统会根据_行参的类型_或_形参的个数数来区分。
17.若有char a[80];则cin>>a表示从键盘上读入一个_字符串到数组a中。
18.类的继承方式有_public继承,_private和_protected. 。
19.重载运算符的含义必须清楚,不能有_二义性。
20.C++的I/O是以_字节流的形式实现的,每个C++编译系统都带有一个面向对象的输入/输出软件包,这就是_I/O流类库。
三、程序阅读题1.#include<iostream>using namespce std;class A{public:int fun (int ,int);};int A::fun(int i,int j){public:int fun(int,int);} ;int B::fun(int i,int j){return i-j;}int main(){A *p;A a;B b;p=&a;cout<<p->fun(1,2)<<endl; p=&b;cout<<p->fun(1,2)<<endl; return 0;}执行结果是:332.#include<iostream.h> Int add(int x, int y){Return x+y+1;}double add(double x,double y){Return x+y-1;}void main(){int a=2,b=4;double c=2.6,d=7.4;cout<<add(a,b)<<”,”<<add(c,d)<<endl;}执行结果是:7 93.#include<iostream.h>int f(char *s){ char *p=s;while(*p)p++;return p-s;}void main(void){cout<<f(“ABCDEF”);}程序的输出结果是_______,函数f的功能是______________。
(答案分别为:6,求字符串的长度)4.#include<iostream.h>void f(int *s){ static int j;do{s[j]+=s[j+1];}while(++j<2);}void main(void){int k,a[10]={1,2,3,4,5};for(f(a),k=0;k<5;k++) cout<<a[k]; cout<<endl;for(f(a),k=0;k<5;k++) cout<<a[k]; cout<<endl;}程序输出的第一行是______,程序输出的第二行是________。
(答案为:35345,35745)5.写出下列程序的运行结果。
#include<iostream.h>class count{ static int n;public:count(){n++;}static int test(){ n+=4;return n;}};int count::n=0;void main(){ cout<<count::test()<<endl;count c1,c2;count<<count::test()<<endl;}(结果为:4,10)四、程序设计题1.针对一个字符串类string,采用成员函数的方法重载“<”,采用友元函数的方法重载“==”运算符,实现字符串的比较。
解:#include<iostream.h>#include<string.h>class string{char str[50];public:string(){*str='\0';}string(char *pstr){strcpy(str,pstr);}const char * getstr(){return str;}int operator<(string s){return strcmp(str,s.str)<0;}friend int operator==(string s1,string s2){return strcmp(s1.getstr(),s2.getstr())==0;}};void main(){string s1("hello"),s2("halt"),s3("halt");if(s1<s2)cout<<"s1不小于s2"<<endl;else cout<<"s1不小于s2"<<endl;if(s3==s2)cout<<"s1等于s2"<<endl;else cout<<"s1不等于s2"<<endl;}2.设计一个程序,实现直角坐标类与极坐标类,并实现以下功能:(1)通过重载运算符,实现两个直角坐标类对象间的加、减运算。