答案:单
[解析]一个基类可以派生多个子类,一个子类可以再派生出多个子类,这样就形成了一个倒立 的树。
7. C++支持的两种多态性分别是___多态性和运行多态性。 答案:静态或编译
[解析]多态性包括静态(编译时)的和动态(运行时)的动态性。
8. C++中语句const char * const p=“hello”;所定义的指针p和它所指的内容都不能被 ___。
答案:修改
[解析]使用const修改的内容不能修改,这里同时修饰地址和值,表示地址和值都不变。 9. 在C++中,定义虚函数的关键字是___。 答案: virtual
[解析]在普通函数前面用virtual修饰的函数,就称为虚函数。
10. 采用私有派生方式,基类的public成员在私有派生类中是___成员。 答案:私有
11. 对赋值运算符进行重载时,应声明为___函数。 答案:类成员
[解析]运算符重载的方法有友元或者成员函数两种途径,但是赋值运算符只能使用成员函数的 方法来实现。
12. 在C++中有两种参数传递方式即值传递和___传递。 答案:引用
[解析]函数参数传递有传值和传引用两种。 13. 预处理命令以___符号开头。 答案: operater
[解析]文件包含、预处理和编译都是以#开头。 14. 在构造函数和析构函数中调用虚函数时采用___。 答案:静态联编
[解析]在析构或构造函数调用虚函数发生静态多态性。 15. C++是通过引用运算符___来定义一个引用的。 答案: &
[解析]引用是C不具有使用方法,它表示变量的别名,在函数中使用很频繁,因为调用形式同 传值调用,但修改形参实参也会相应改变的特征。
16. 如果要把类B的成员函数void fun()说明为类A的友元函数,则应在类A中加入语句___。 答案: friend void B::fun();
[解析]声明成员函数作为另外一个类的友元函数时,使用类作用域运算符::。
17. 如果要把PI声明为值为3.14159类型为双精度实数的符号常量,该声明语句是___。 答案:)const double PI(3.14159);或者const double PI=3.14159;
[解析]使用const声明符号常量,常量和常量值可以用括号也可以赋值号。 18. 在C++四个流对象中,___用于标准屏幕输出。 答案: cout
[解析]cin、cout、cerr和clog中cin用于输入,cout用于输出,cerr、clog错误处理。 19. 执行下列代码 int a=32; double c=32;
cout.setf(ios::hex);
cout<<\cout.unsetf(ios::hex); 程序的输出结果为___。 答案: hex:a=20,c=32
[解析]用十六进制只能输出整型数据,而不能将其它类型数据转换成十六进制的数据输出。所 以double类型不变仍然是32(double类型)。
20. 已知有20个元素int类型向量V1,若用V1初始化为V2向量,语句是___。 答案: ector
[解析]采用向量初始化另一个向量的形式:vector
A(int i){x=i;} A(){x=0;}
friend int min(A&,A&); };
int min(A & a,A &b)
{ return (a.x>b.x)?a.x:b.x; }
void main() { A a(3),b(5);
cout< 答案:cout< virtual int area(){return 0;} }; class rectangle:public shape {public: int a, b; void setLength (int x, int y) {a=x;b=y;} int area() {return a*b;} }; void main() {rectangle r; r.setLength(3,5); shape s1,*s2=&r; cout < cout < 答案:shape s1,*s2=r;指针使用错误。s是指针使用它指向对象的成员有两种方法,有下面两行 可知,使用的是引用。 [修改]改为shape &s=r; 3. 下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。 #include {x=a,y=b;s=x+y;} void show() {cout<<\} }; void main() { A 答案: [修改]A [解析]A add(10,100);类模板的使用,参数实例化后生成模板类。用类模板定义对象时要指定 参数类型。 4. 生成具有n个元素的动态数组。 #include int a[n]; a[0]=2; cout< 答案:int a[n];生成具有n个元素的动态数组,要使用new,所以int a[n];错误。 [修改]int *a=new int[n]; 5. #include virtual void fun()=0; A(int a) {i=a;} }; class B:public A {int j; public: void fun() {cout<<\\n\ B(int m,int n=0):A(m),j(n){} }; void main() {A *pa; B b(7); pa=&b; } 答案:B(int m,int n=0):A(m),j(n){}因为基类是抽象类,不能被实例化,所以在派生类中不能 调用初始化基类对象。所以B(int m,int n=0):A(m),j(n){}错误,删去A(m)。 [修改]B(int m,int n=0):j(n){} 四、完成程序题(本大题共5小题,每小题4分,共20分) 1. 在下面程序横线处填上适当字句,以使该程序执行结果为: 50 4 34 21 10 0 7.1 8.1 9.1 10.1 11.1 #include for (int i=0;i t=a[i], a[i]=a[n-1-i], a[n-1-i]=t; } void main () {int a[5]={10,21,34,4,50}; double d[6]={11.1,10.1,9.1,8.1,7.1}; f(a,5);f(d,6); for (int i=0;i<5;i++) cout < for (i=0;i<6;i++) cout << d[i] << \cout << endl; } 答案:T a[],int n,T t=0; [解析]不同的数据类型的调用,使用了模板。f函数增加t变量,因为实参类型不同,所以t的 类型应该是T类型的。 2. 完成下面类中成员函数的定义。 #include int n;//数组大小(元素个数) public: Arr(int sz=10) { n=sz; p=new float[n]; } ~Arr(void) { _________ } int Getn(void) const { return n; } float & operator[](int i) { ________ } void Print(); }; void Arr::Print() {int i; for(i=0;i< this->Getn();i++) {if (i==0) cout << endl; cout< cout< void main() {Arr a(20); for (int i=0;i 答案:delete p;,return p[i]; [解析]在析构函数中释放对象空间。第二个是对[]运算符的重载,函数返回类型是实型,形 参i,取得下标为i的元素的值。 3. 下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。 #include double l=2.0*pi*rad; double s=pi*rad*rad; cout<<\\n The long is:\cout<<\:\ 答案:using namespace std,#define pi 3.14159 [解析]进行输入或输出要引入iostream, 所以using namespace std;从标点看没有分号,所以 使用宏定义,#define pi 3.14159。 4. 在下划线处填上缺少的部分。 #include void Setij(int a,int b){i=a,j=b;} ~Samp() {cout<<\int GetMuti(){return i*j;} protected: int i; int j; }; int main() {Samp *p; p=new Samp[5]; if(!p) {cout<<\\n\return 1; } for(int j=0;j<5;j++) p[j].Setij(j,j); for(int k=0;k<5;k++) cout<<\[\] is:\[k].__________< 答案:GetMuti(),delete[]p; [解析]调用只有一个有返回值的成员函数,释放对象数组所占的空间。 5. 请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为: 11,10 13,12 #include