面向对象程序设计复习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Derived objD1; Base objB=objD1; //A Base *pb=&objD1; //B Base &refB=objD1; //C Derived objD2=objB; //D 21. 下面对派生类的描述中,错误的是( A )。 A、派生类是对基类的具体化 B、派生类能够作为基类继续派生新类 C、派生类可以有多个直接基类 D、派生类的缺省继承方式是private 22. 实现动态联遍不能通过(A )调用虚函数。 A、构造函数 B、对象引用 C、对象指针 D、成员函 数 23. 下面( D )不是抽象类的特性。 A、可以说明纯虚函数 B、不能说明抽象类的对象 C、用做基类,提供公共的接口 D、可以定义虚构造函数 24. C++流中重载的运算符<<,是一个( B )。 A、用于输出操作的成员函数 B、用于输出操作的非成员函 数 C、用于输入操作的成员函数 D、用于输入操作的非成员函 数 2、 程序填充题 1. 下列运算符既可以作为类的成员函数重载,也可以作为类的友元 函数重载,请在表格中的空白处填上正确的表达式。 表达式 a+b a++ 成员函数 (1) (3) 友元函数 (2) operator ++ (a,
class Derived : public Base { }; Derived objD1; Base objB=objD1; //A Base *pb=&objD1; //B Base &refB=objD1; //C Derived objD2=objB; //D 8. 下面对派生类的描述中,正确的是( B )。 A、派生类是对基类的具体化 B、一个派生类可以作为另一个派生类的基类 C、派生类只能有一个直接基类 D、派生类的缺省继承方式是public 9. 实现动态联遍必须通过(A )调用虚函数。 A、对象引用 B、成员名限定 C、对象名 D、构造 函数 10. C++流中重载的运算符>>,是一个(B )。 A、用于输出操作的非成员函数 B、用于输入操作的非成 员函数 C、用于输出操作的成员函数 D、用于输入操作的成员函 数 11. ( A )不是面向对象系统包含的要素。 A、多态 B、对象 C、类 D、继承 12. 下列对常量的定义中,错误的是( C )。 A、int const size=10; B、char * const p="Good Luck"; C、void const print(); D、const MyClass obj(10,10); 13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为 (D )。 int x=100,&r=x; cout<<x<<'-'<<r<<endl; A、Address-100 B、100-Address C、Address-Address D、100-100 14. 若函数原型为void Fun(int x=9,int y=8,char z='7'),则下列调用错误
c=a; c.output(); }; 答案:Constructor Copy constructor Constructor Assignment 5 Destructor Destructor Destructor 3. #include <iostream.h> class Base1{ public: Base1(int x) { cout<<"Base1's con. "<<x<<endl; } ~Base1() { cout<<"Base1's des. "<<endl; } }; class Base2{ public: Base2(int x) { cout<<"Base2's con. "<<x<<endl; } ~Base2() { cout<<"Base2's des. "<<endl; } }; class Derived : public Base2,public Base1{ public: Derived(int x,int y):Base1(y),Base2(x) { cout<<"Derived's con." <<endl; } ~Derived() { cout<<"Derived's des."<<endl; } }; void main(){ Derived obj(1,2); } 答案:Base2's con. 1 Base1's con. 2
Test a(8.9,2.5,3.1416); a.Show(); const Test b(2.5,8.9,3.14); b.Show(); } 答案:8.9 2.5 p=3.1416 2.5 8.9 const p=3.14 const 2. #include <iostream.h> class A{ public: A(int i){ cout<<"Constructor"<<endl; p=new int(i);} A(A& r){cout<<"Copy constructor"<<endl; p=new int(*r.p);} ~A(){cout<<"Destructor"<<endl; delete p;} A& A::operator =(A& r); void output() {cout<<*p<<endl;}; private: int *p; }; A& A::operator =(A& r) { cout<<"Assignment"<<endl; if(this==&r) return *this; delete p; p=new int(*r.p); return *this; }; void main(){ A a(5); A b=a; A c(6);
来自百度文库
0) -a a.operator - ( ) (4) (2) operator +(a,b) 1. 答案: (1) a.operator+(b) (3) a.operator++(0) (4) operator –(0)
2. 下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。 #include <iostream.h> void fun1( (1) , int b) { int c; c=a; a=b; b=c; } void fun2( (2) , int *b) { int c; c=*a; (3) ; *b=c; } void fun3( (4) , int b) { int c; c=a; (5) ; b=c; } void main(){ int x,y; x=1; y=2; fun1(x,y); cout<<x<<y<<','; x=1; y=2; fun2(&x,&y); cout<<x<<y<<','; x=1; y=2; fun3(x,y); cout<<x<<y<<endl; } 2. 答案: (1) int a (2) int *a (3) *a=*b (4) int &a (5) a=b 3. 下列程序执行后的输出结果是B0 D00 B1 D23 ~D ~B ~D ~B,请 将下列程序补充完整。 class Base { public: Base(int i=0) {x = i; cout<<'B'<<x<<' ';} ~Base() { cout<<"~B"<<x<<' '; } private: int x; }; class Derived : public Base { int y, z; public: __________________(1)________________________// Constructor
的是(B )。 A、Fun() B、Fun(3, '0') C、Fun(1,2) D、Fun(2,4, 'a') 15. 若有如下函数声明:void Fun(int x);,则下列( C )不能与该函 数进行重载。 A、void Fun(int x,int y); B、void Fun(double x); C、void Fun(int x,int y=1); D、void Fun(int x) const; 16. 下列对构造函数和析构函数的描述中,正确的是(A )。 A、析构函数不可以重载 B、构造函数不能定义为内联函数 C、构造函数中不能设置参数的缺省值 D、析构函数名与类名不同 17. 下面对静态成员的描述中,错误的是( C )。 A、静态成员的提出是为了解决数据共享问题 B、静态数据成员的初始化在类体外进行 C、类的不同对象有不同的静态数据成员值 D、静态成员函数可以直接访问类中的静态数据成员 18. 下列对友元的描述中,正确的是( D )。 A、友元可以在类外声明和定义 B、友元降低了程序的运行效率 C、友元不能访问类中的保护成员 D、友元破坏了类的封装性 19. 下列对继承的描述中,错误的是( C )。 A、派生类对象不能访问基类的保护成员 B、派生类对基类成员的访问权限随着继承方式而改变 C、派生类成员可以访问基类的私有成员 D、派生类继承了基类的所有成员 20. 程序中,编译时出错的语句是(D )。 class Base{ }; class Derived : public Base { };
《面向对象程序设计》复习题
1、 单项选择题 1. ( A )是面向对象系统包含的要素。 A、类 B、多态 C、友元 D、重载 2. 下列对常量的定义中,错误的是( C )。 A、MyClass const obj(3,4); B、char * const p="hello"; C、int i=1; const int &ref=i; D、void show() const; 3. 若有如下函数声明:void Fun(int x);,则下列(D )能与该函数 进行重载。 A、void Fun(int y); B、void Fun(int x,int y='1'); C、int Fun(int x); D、void Fun(int) const; 4. 下列对构造函数和析构函数的描述中,错误的是( B )。 A、构造函数可以重载 B、析构函数名与类名相同 C、构造函数中可以设置参数的缺省值 D、类中只有一个析构函数 5. 下列对友元的描述中,错误的是( C )。 A、友元破坏了类的封装性 B、友元提高了程序的运行效率 C、友元可以在类外声明和定义 D、友元能够访问类中的私有成员 6. 下列对继承的描述中,正确的是( C )。 A、派生类对象能够访问基类的公有成员 B、派生类继承了基类的公有成员和保护成员 C、派生类对象不能访问基类的保护成员 D、派生类不改变基类成员的访问权限 7. 程序中,编译时出错的语句是(B )。 class Base{ };
__________________(2)________________________// Destructor }; void main() { Derived obj1; Derived obj2(1,2,3); } 3. 答案:(1) Derived(int a=0,int b=0,int c=0): Base(a) { y=b; z=c; cout<<'D'<<y<<z<<' ';} (2) ~Derived() { cout<<"~D "; } 3、 阅读程序题 1. #include <iostream.h> class Test { public: Test (double m,double n,double d):p(d) { x=m; y=n; } void Show(); void Show() const; private: double x, y; const double p; }; void Test::Show() { cout<<x<<","<<y<<endl; cout<<"p="<<p<<endl; } void Test::Show() const { cout<<x<<","<<y<<" const"<<endl; cout<<"p="<<p<<" const"<<endl; } void main() {