C++面向对象技术复习题汇总(含答案)
更新时间:2023-11-22 20:35:01 阅读量: 教育文库 文档下载
- 面向对象开发技术推荐度:
- 相关推荐
面向对象程序设计C++
复习资料与答案
2009年 7月
第一、二、六、七章习题
一、选择题
1、系统约定C++源程序文件名的缺省的扩展名为( ) A、bcc B、c++ C、cpp D、vcc
2、面向对象的程序设计将数据与( )放在一起,作为一个相互依存、不可分割的整体来处理。
A、对数据的操作 B、信息 C、数据隐藏 D、数据抽象 3、当一个函数无返回值时,函数的类型应定义为( ) A、void B、任意 C、int D、无 4、对于C++的函数,正确的叙述是:
A、函数的定义不能嵌套,但函数的调用可以嵌套 B、函数的定义不能嵌套,但函数的调用不能嵌套 C、函数的定义和调用都不能嵌套 D、函数的定义和调用都可以嵌套 5、下列语句中错误的是( )
A、int *p=new int(10); B、int *p=new int[10] C、int *p=new int; D、int *p=new int[40](0);
6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:( ) A、name[3]=’a’; B、name=”lin”; C、name=new char[5]; D、cout< 7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:( ) A、name[3]=’q’; B、name=”lin”; C、name=new char[5]; D、name=new char(‘q’); 8、假设已经定义:const char *name=”chen”;, 下面的语句中错误的是:( ) A、name[3]=’q’; B、name=”lin”; C、name=new char[5]; D、name=new char(‘q’); 9、下面的类型声明中正确的是:( ) A、int &a[4]; B、int &*p; C、int &&q D、int i,*p=&i; 10、假设定义了函数模板( ) template T max(T x,T y){ return(x>y)?x:y;} 并定义了int i;char c;错误的调用语句是:( ) A、max(i,i) B、max(c,c) C、max((int)c,i); D、max(i,c) 11、模板的使用是为了( ) A、提高代码的可重用性 B、提高代码的运行效率 C、加强类的封装性 D、实现多态性 12、设有二个语句:int x[‘a’];cin>>x;则编译器认为( ) A、说明语句int x[‘a’]错 B、二个语句都错 C、语句cin>>x 错 D、二个语句正确,没有语法错 13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( ) A、f(py[10],n); B、f(py,n) C、f(*py,&n) D、f(py,&n) 14、在C++中实现封装是借助于( ) 2 A、枚举 B、类 C、数组 D、函数 15、对于下面几个函数: (1) void f(int x,float y) {? ? } (2) int f(int a,float b){? ? } (3) int f(int i,int j){? ? } (4) float k(int x){? ? } 是重载函数。 A、4个全部 B、1和2 C、2和3 D、3和4 16、使用myFile.open(“Sales.dat”,ios::app);语句打开文件Sales.dat后,则( ) A、使输出追加到文件尾部 B、打开一个文件进行读操作 C、打开一个文件进行读和写操作 D、文件以二进制方式打开,默认时为文本文件 二、填空题 1、面向对象的程序设计有四大特征,它们是抽象、封装、 、 。 2、结构体类型中的数据和成员函数默认类型为 。 3、C++要求为每个函数建立原型,以说明函数的名称、参数的 和 ,以及函数返回值。 4、在函数说明前加关键字“inline”,则该函数被声明为 函数,其引入的目的是为了消除函数调用时的开销,以提高运行速度。 5、引用变量与被引用变量占有 内存单元。 6、 运算符能够用于访问当前作用域内与局部变量同名的全局变量。 7、#include { for(int a=1,b=1;a<=5;a++) { if(b>=8) break; if(b%2==1){b+=7;continue;} b-=3; } cout<<”a=”< int x=100; void main(void) { int x=200;x+=::x; {int x=500;::x+=x;} cout< void f(float x=5, int y=16, char z=?C?); 3 void main( ) { float a=1.6; int b=2; char c='D'; f();f(a);f(a,b); f(a,b,c); } void f(float x, int y, char z) { cout<<“x=”< 程序的第二行输出为 ,第三行输出为 。 11、以下程序的输出结果是 。 #include { f(6)=?X?; cout< { return a[i]; } 12、如果C++程序中使用了:cout、strcpy,则必须在程序首部包含文件 和 。 13、#include { int i=7890; cout< 程序的第一行输出为 ,第二行输出为 。 14、#include { int i=100;cout.setf(ios::hex); cout< 以上程序运行的结果是 4 第三章 类和对象 一、选择题 1、( )不是构造函数的特征。 A、构造函数的函数名与类名相同; B、构造函数可以重载; C、构造函数可以设置缺省参数; D、构造函数必须指定类型说明。 2、下列关于构造函数的描述中,( )是正确的。 A、构造函数可以设置缺省参数; B、构造函数可以被继承; C、构造函数可以对静态数据成员进行初始化; D、构造函数可以说明为虚函数; 3、( )是析构函数的特征。 A、析构函数可以有一个或多个参数; B、析构函数名与类名不同; C、析构函数的定义只能在类体内; D、一个类中只能定义一个析构函数; 4、定义析构函数时,应该注意( )。 A、其函数名与类名完全相同; B、函数返回类型是void类型; C、无形参,也不可重载; D、函数体中必须有delete语句; 5、下列静态数据成员的特性中,( )是错误的。 A、说明静态数据成员时前边要加修饰符static; B、静态数据成员要在类体外进行初始化; C、静态数据成员不是所有对象所共用的; D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符; 6、友元的作用是( )。 A、提高程序的运用效率; B、加强类的封装性; C、实现数据的隐藏性; D、增加成员函数的种类; 7、关于成员函数特征的下列描述中,( )是错误的。 A、成员函数一定是内联函数; B、成员函数可以重载; C、成员函数可以设置缺省参数值; D、成员函数可以是静态的; 8、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,( A、void print() const; B、const void print(); C、void const print(); D、void print(const); 5 )是正确的; 9、在( )情况下适宜采用inline定义内联函数。 A、函数体含有循环语句; B、函数体含有递归语句; C、函数代码小,频繁调用; D、函数代码多,不常调用; 10、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构 造函数的次数为( )。 A、 3 B、 4 C、 6 D、 9 11、通常拷贝初始化构造函数的参数是( )。 A、某个对象名 B、某个对象的成员名 C、某个对象的引用名 D、某个对象的指针名 12、有关类的说法不正确的是( )。 A、类是一种用户自定义的数据类型 B、只有类中的成员函数才能存取类中的私有数据 C、在类中,如果不作特别说明,所有的数据均为私有类型 D、在类中,如果不作特别说明,所有的成员函数均为公有类型 13、在声明类时,下面说法正确的的是( )。 A、可以在类的声明中给数据成员赋初值 B、数据成员的类型可以是register C、public, private, protected这三种属性的成员可以按任意顺序出现 D、没有用public, private, protected定义的成员是公有成员 14、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为 5, ( )是正确的。 A、A1.p=5 B、A1->p=5 C、A1.*p=5 D、*A1.p=5 15、已知:类A中一个成员函数说明如下: void Set(A&a); 其中,A&a的含义是( )。 A、指向类A的指针为a B、将a的地址值赋给变量Set C、a是类A的对象引用,用来作函数Set()的形参 D、变量A与a按位相与作为函数Set()的参数 16、下列说明中const char *ptr; ptr应该是( )。 A、指向字符型常量的指针 B、指向字符的常量指针 C、指向字符变量的指针 D、指向字符串的常量指针 17、采用函数重载的目的在于: A、实现共享 B、减少空间 C、提高速度 D、使用方便,提高可读性 18、有关类和对象的说法下列不正确的是( )。 6 A、对象是类的一个实例 B、任何一个对象只能属于一个具体的类 C、一个类只能有一个对象 D、类与对象的关系和数据类型和变量的关系相似 19、有以下类的说明,请指出错误的地方()。 Class CSample { int a=2.5; A CSample(); B public: CSample(int val); C ~CSample(); D }; 20、在类的定义形式中,数据成员、成员函数和( )组成了类定义体。 A、成员的访问控制信息 B、公有消息 C、私有消息 D、保护消息 二、填空题 1. 通常的拷贝初始化构造函数的参数是_________________ 2. 在C++中函数参数的传递方式有三种,分别是:__________、__________和__________。 3. 任何类中允许有三种访问权限的数据,这三种访问权限分别是__________、__________ 和__________。 4. 类中数据成员和成员函数的默认类型为______________ 5. 在类内部定义的__________和__________数据不能被不属于该类的成员函数来存取,定 义为__________的数据,可以在类外部进行存取。 6. __________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员 进行初始化并执行对象的其他内部管理操作。 7. 一个类中有__________个析构函数。 8. __________成员函数中不能直接引用类中说明的非静态成员。 9. 已知类Sample 中的一个成员函数说明如下: void Set(Sample &a); 其中,Sample &a的含意是_________________ 10.静态数据成员属于类,可以使用_______________ 的方式访问静态的数据成员。 11.编译程序将this指针指向_____________。 12.以下程序的执行结果是__________。 # include Sample () { cout << “constructore” << endl; } }; 7 void fn (int i) { static Sample c; cout << “i=” << i << endl; } void main () { fn (10) ; fn (20) ; } 13. 以下程序的执行结果是_______________。 # include static int k; public: sample(int i) { n=i; k++; }; void disp(); }; void sample:: disp () { cout<<\int sample:: k=0; void main () { sample a(10), b(20), c(30) ; a.disp() ; b.disp(); c.disp(); } 14.以下程序的执行结果是_______________ # include void setx( int i ) { x=i; } int putx( ) { return x; } }; void main ( ) { sample *p; sample A [3]; A[0].setx(5); A[1].setx(6); A[2].setx(7); for (int j=0 ; j<3; j++ ) { p= &A [j] ; cout< 8 } cout< } 15.以下程序的执行结果是_______________ #include 三、编程题 1. 定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。 2. 设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。 9 第四章 派生类与继承 一、选择 1、 从一个基类派生出的各个类的对象之间 (1) 。 A、共享所有数据成员,每个对象还包含基类的所有属性 B、共享部分数据成员,每个对象还包含基类的所有属性 C、不共享任何数据成员,但每个对象还包含基类的所有属性 D、共享部分数据成员和成员函数 2、 C++的继承性允许派生类继承基类的 (2) 。 A、部分特性,并允许增加新的特性或重定义基类的特性 B、部分特性,但不允许增加新的特性或重定义基类的特性 C、所有特性,并允许增加新的特性或重定义基类的特性 D、所有特性,但不允许增加新的特性或重定义基类的特性 3、 对于公有继承,基类的公有和保护成员在派生类中将 (3) 成员。 A、全部变成公有 B、全部变成保护 C、全部变成私有 D、仍然相应保持为公有和保护 4、建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为 (4) 的构造函数。 A、自己所属类、对象成员所属类、基类 B、对象成员所属类、基类、自己所属类 C、基类、对象成员所属类、自己所属类 D、基类、自己所属类、对象成员所属类 5、派生类的对象对其基类中 (5) 可直接访问。 A、公有继承的公有成员 B、公有继承的私有成员 C、公有继承的保护成员 D、私有继承的以有成员 6、设类B是基类A的派生类,并有语句:A aa, * pa=&aa; B bb, * pb=&bb; 则正确 的语句是___(6)__ 。 A、pb=pa; B、bb=aa; C、aa=bb; D、*pb=*pa; 7、在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 _ (7)__. A、派生类的对象可以赋给基类的对象 B、派生类的对象可以初始化基类的引用 C、派生类的对象可以直接访问基类中的成员 D、派生类的对象的地址可以赋给指向基类的指针 8、若类X和类Y的定义如下: class X { int a,b; public: void fx ( ); }; class Y: public X { int c; public: void fy ( ); }; 10 void Y::fy ( ) { c=a*b; } 则上述代码中, (8) 是非法的语句。 A、void fx(); B、k=a*b; C、void fy(); D、int c; 9、如果一个派生类的基类不止一个,则这种继承称为__(9)__。 A、单继承 B、虚继承 C、多态继承 D、多重继承 10.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: (10) 。 A、 AB operator+(AB & a , AB & b) B、 AB operator+(AB & a) C、 operator+(AB a) D、 AB & operator+( ) 11、下面叙述不正确的是 (11) 。 A、派生类可以使用private派生 B、基类的public成员在派生类中仍然是public C、对基类成员的访问必须是无二义性的 D、赋值兼容原则也适合多重继承的组合 12、下面叙述不正确的是 (12) 。 A、基类的protected成员在派生类中仍然是protected B、基类的protected成员在public派生类中仍然是protected C、基类的protected成员在private派生类中仍然是private D、对基类成员的访问必须是无二义性的 13、下面叙述不正确的是 (13) 。 A、成员的访问能力在private派生类中和public派生类中仍是不同的 B、基类的private成员在public派生类中不可访问 C、赋值兼容规则不适合于多重继承的组合 D、public基类成员在protected派生中是protected 14、下面叙述正确的是 (14) 。 A、基类的对象可以赋给派生类 B、只要是基类的对象,都可以赋给由它派生的任一个派生类对象 C、只有该基类直接派生出来的类的对象才可以赋给该基类的对象 D、公有派生类的对象可以赋给基类的对象 15以下程序的输出结果为是 (15) 。 #include class B:virtual public A{}; class C:virtual public A{}; class D:public B,public C { int getn(){return B::n;} }; void main() { D d; d.B::n=10; d.C::n=20; cout< A、10,20 B、20,20 C、10,10 D、输出有二义性,不确定 二、填空题 11 1、在C++中派生类时,可以有 (1) 、 (2) 和 (3) 三种不同的方式。 2、公有派生类不能访问基类的 (4) 成员,但是派生类可以访问基类的 (5) 成员和 (6) 成员。 3、构造函数不能被继承,因此,派生类的构造函数必须通过调用 (7)构造函数进行初始化基类的对象。 4、保护派生具有双重作用:对 (8) ,具有公有性,对其他外部,具有(9) 。 5、在多重派生中,要使公共基类在派生类中只有一个拷贝,必须将该基类说明为 (10) 。 6、[程序] #include private: int x; public: A(int x1) { x=x1;} void print() {cout<<\}; class B: private A{ private: int y; public: B(int x1,int y1):A(x1) { y=y1;} A::print; }; void main() { B b(20,10); b.print(); } 程序输出的结果为 (11) 。 7、[程序] #include { public: A(int i,int j){a=i;b=j;} void move (int x,int y) { a+=x;b+=y;} void show(){ cout <<\ private: int a,b; }; class B:private A { public: B(int i,int j,int k,int l):A(i,j) { x=k;y=l;} void show() { cout< void fun(){move(3,5);} void f1(){A::show();} private: int x,y; }; 12 void main() { A e(1,2); e.show(); B d(3,4,5,6); d.show(); d.fun(); d.f1(); } 程序输出的结果为 (12) , (13) , (14) 。 8、[程序] #include protected: int x; public:L(int a){x=a;} }; class X:public L{ public: X(int a):L(a){}; int GetX(){return x;}; }; class Y:public L{ public: Y(int a):L(a){}; int GetX(){return x;} }; class Z:public X,public Y{ public: Z(int a):X(a+10),Y(a+20){ }; }; void main(){ Z z(20); cout< L类成员int x ,Y类成员int GetX(){return x;}在Z类中,分别具有什么属性 (15) 和 (16) ;程序输出结果的第一行是 (17) 。 9、以下程序输出第一行 (18) , 第二行 (19) 。 #include public:virtual void print(){cout<<\}; class B:public A{ public:void print(){cout<<\}; class C:public A{ public:void print(int S=0){cout<<\ }; 13 void main() { B b;C c; A *ap=&b; ap->print(); ap=&c; ap->print(); } 10、指出下面程序段的错误行,并说明原因 (20) 。 (继续派生,讲解共有派生,但是基类函数非虚函数的情况) 1 class base { 2 public: void pbase(){cout<<\3 }; 4 class derive :private base 5 { public:void pderive(){cout<<\6 }; 7 void main() 8 { base op1,*ptr; 9 deiver op2; 10 ptr=&op1; 11 ptr=&op2; 12 } 11、指出下面程序段的错误行,并说明原因 (21) 。 1 class C { 2 public: void pbase(){cout<<\3 }; 4 class D:public base 5 { public:void pderive(){cout<<\6 }; 7 void main() 8 { C obj1; 9 D obj2, *ptr; 10 ptr=&obj1; 11 ptr=&obj2; 12 } 12、指出下面程序段的错误行,并说明原因 (22) 。 1 class A { 2 public: void print1(){cout<<\3 }; 4 class B:public A 5 { public:void print2(){cout<<\6 }; 7 void main() 8 { A oo1,*ptr; 9 B oo2; 14 10 ptr=&oo1; 11 ptr->print1(); 12 ptr=&oo2; 13 ptr->print1(); 14 ptr->print2(); 15 } 三、编程题 1、在下面基类Areaclass的基础上建立两个派生类Box (方形类)与Isosceles(等腰三角形类),每个派生类包含一个函数Area(),分别用于返回方形和等腰三角形的面积,并声明对象,进行检验。 class Areaclass{ public: Areaclass (double x=0, double y=0):height(x), width(y){ } protected: double height, width; }; 2、定义一个类:圆,包含圆的半径;定义构造函数;计算圆的面积。 利用圆基类派生类:圆柱;定义构造函数;计算圆柱的体积。声明对象,并且检验计算功能。 15 第五章 多态性 一、单选题 1、 下列运算符中,______运算符在C++中不能重载。 A、 ? : B、+ C、— D、<= 2、 下列运算符中,______运算符在C++中不能重载。 A、> B、[ ] C、 :: D、<< 3、 在C++中,通常重载运算符的成员函数称为______。 A、运算符函数 B、重载函数 C、函数重载运算符 D、以上都不对 4、 下列函数中,______不能重载。 A、成员函数 B、非成员函数 C、析构函数 D、构造函数 5、 系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中, 不能作为依据的是______。 A、参数的个数 B、参数的类型 C、参数的顺序 D、函数的类型 6、 下列对重载函数的描述中,______是错误的。 A、重载函数中不允许使用默认参数 B、重载函数中编译是根据参数表进行选择的 C、一般情况下,不要使用重载函数来描述毫无相干的函数 D、构造函数重载将会给初始化带来多种方式 7、 下列关于运算符重载的描述中,______是正确的。 A、运算符重载可以改变运算符的个数 B、运算符重载可以改变优先级 C、运算符重载可以改变结合性 D、运算符重载不可以改变语法结构 8、要实现动态联编,派生类中的虚函数______。 A、参数个数必须与函数的原型相同,参数类型可以与函数的原型不同 B、参数类型必须与函数的原型相同,返回类型可以与函数的原型不同 C、参数个数、类型和顺序必须与函数的原型相同,返回类型必须与函数的原型相同 D、以上都对 9、关于虚函数的描述中,______是正确的。 A、虚函数是一个static类型的成员函数 B、虚函数是一个非成员函数 C、基类中说明了虚函数后,派生类中对其对应的函数可不必说明为虚函数 D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型 10、______是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。 A、虚析构函数 B、虚构造函数 C、纯虚函数 D、静态成员函数 11、对于以下类定义,下面正确的叙述是 ( ) class A 16 { public: virtual void func1( ){ } void func2( ){ } }; class B:public A{ public: void func1( ){cout<< ″ class B func 1 ″ < virtual void func2( ){cout<< ″ class B func 2 ″ < A、 A::func2( ) 和 B::func1( ) 都是虚函数 B、A::func2( ) 和 B::func1( ) 都不是虚函数 C、B::func1( ) 是虚函数,而 A::func2( ) 不是虚函数 D、B::func1( ) 不是虚函数,而 A::func2( ) 是虚函数 12、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: 。 A、AB operator+(AB & a , AB & b) B、AB operator+(AB & a) C、operator+(AB a) D、AB & operator+( ) 13、下面是对虚函数的的正确描述 。 A、虚函数不能是友元函数 B、构造函数可以是虚函数 C、析构函数不可以是虚函数 D、虚函数可以静态成员函数 二、填空题 1、 C++ 支持的两种多态性分别是_________多态性和________ 多态性。 2、 静态编联通过 和 实现,动态编联通过 和 实现。 3、 函数重载时,须符合 相同和 、 、 之一至少不同 四个条件 4、运算符重载的两种方法: 和 。 5、以下程序的执行结果是________________。 #include static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31}; class date { int mo,da,yr; public: date(int m,int d,int y){ mo=m; da=d; yr=y; } date() { } void disp() { cout< while(day>dys[dt.mo-1]) { day-=dys[dt.mo-1]; if(++dt.mo==13) { dt.mo=1; dt.yr++; } } dt.da=day; 17 return dt; } }; void main() { date d1(2,10,2001),d2; d2=d1+20; d2.disp(); } 6、以下程序的执行结果是_______________。 #include virtual void f1() { cout<<”f1 function of base”< { cout<<”f2 function of base”< { cout<<”f3 function of base”< { cout<<”f4 function of base”< class derive: public base { void f1() { cout<<”f1 function of derive”< { cout<<”f2 function of derive”< { cout<<”f4 function of derive”< void main() { base obj1, *p; derive obj2; p=&obj1; p->f1(); p->f2(); p->f3(); p=&obj2; p->f1(); p->f2(); p->f4(); } 7、以下程序的执行结果是________________。 #include int x; public: 18 Sample(){ x=0; } void disp() { cout<<”x=”< }; void main() { Sample obj; obj.disp(); obj++; cout<<”执行obj++之后”< 8、以下程序的执行结果是_________________。 #include Point(){ x=0; y=0; } Point(unsigned x, unsigned y) { Point::x=x; Point::y=y; } unsigned getx(){ return x; } unsigned gety(){ return y; } void print() { cout<<”Point(“< unsigned x,y; }; Point operator+(Point &pt, int nOffset) { Point ptemp=pt; ptemp.x+=nOffset; ptemp.y+=nOffset; return ptemp; } Point operator+(int nOffset, Point &pt) { Point ptemp=pt; ptemp.x+=nOffset; ptemp.y+=nOffset; return ptemp; } void main() { Point pt(10,20); 19 pt.print() pt=pt+3; pt.print(); pt=3+pt; pt.print(); } 9、下面程序意图把base 和derived 中的fun1,fun2函数说明为虚函数,从而利用base基类的指针实现动态联编,是否正确,请解释原因 。 #include virtual int fun1(int a,int b,int c)=0; float fun2(int d){ } }; class derived:public base { public: int fun1(int a,int b){ return 0; } virtual float fun2(int d) {…} }; 三、编程题 定义一个表示三维空间坐标点的类,并对下列运算符重载。 (1)、<<:按 (x,y,z) 格式输出该点坐标(坐标为整型); (2)、 > :如果A点到原点的距离大于B点到原点的距离,则A>B为真,否则为假。 20 第四章 派生类与继承 一、选择 1、C 2、C 3、D 4、C 5、A 6、C 7、C 8、B 9、D 10、B 11、B 12、A 13、C 14、D 15、B 二、填空题 1、私有派生 2、公有派生 3、保护派生 4、私有成员 5、保护成员 6、公有成员 7、基类 8、派生类 9、私有性 10、虚基类 11、20 12、(1,2) 13、5,6 14、(6,9) 15、protected 16、public 17、30 18、op 19、mn 20、基类指针对象不可以指向私有派生对象 21、派生类对象不可以指向基类对象 22、基类指针对象不可以直接访问派生类中定义的成员 三、编程题 1、 #include \class Areaclass{ public: Areaclass(double x=0,double y=0):height(x),width(y){} protected: double height,width; }; class Box:public Areaclass{ public: Box(double x,double y):Areaclass(x,y){} double Area(){return height*width;} }; class Isosceles:public Areaclass{ public: Isosceles(double x,double y):Areaclass(x,y){} double Area(){return height*width/2;} }; void main(void) { Box Box1(10,5); 26 Isosceles Iso1(10,5); cout< #include const double Pi=3.1415926; class circle { double radius; public:circle(double r){radius=r;} double area(){return Pi*radius*radius;} }; class cylinder:public circle{double height; public: cylinder(double r,double h):circle(r) double volume() {return area()*height;} }; void main(){ cylinder obj1(5,5); cout<<\圆柱体的体积为:\} 27 {height=h;} 第五章 多态性参考答案 一、单选题 1、A 2、C 3、D 4、C 5、D 6、A 7、D 8、C 9、C 10、A 11、C 12、B 13、A 二、填空题 1、编译时的(或静态) 运行时的(或动态) 2、函数重载 运算符重载 继承 虚函数 3、函数名 形参个数 形参类型 形参顺序 4、友员运算符函数 成员运算符函数 5、3/2/2001 6、f1 function of base f2 function of base f3 function of base f1 function of derive f2 function of base f4 function of base 7、x=0 执行obj++之后 x=10 8、Point(10,20) Point(13,23) Point(16,26) 9、不正确, 1)derived中fun1函数参数与base中fun1函数参数不同,故不符合要求 2)对fun2函数,声明虚函数需要在基类base中进行,故不符合要求 三、编程题 #include private: float x, y,z; public: vector3(float x1=0.0,float y1=0.0, float z1=0.0) : x( x1), y(y1), z(z1) {} ~vector3() {} bool operator>(const vector3 &B1) { return (( x *x + y* y+ z * z ) >(B1.x *B1.x+B1.y*B1.y+B1.z*B1.z)); friend ostream& operator<<(ostream &os,vector3 v); }; ostream& operator<<(ostream &os,vector3 v) { os<<\ return os; 28 } } void main() { vector3 v1(1,2,3); vector3 v2(4,5,6); cout< cout<<(v2>v1)< 29 参考答案 第一、二、六、七章习题答案 一、选择题: 1、C 2、A 3、A 4、A 6、D 7、A 8、A 9、D 11、A 12、C 13、B 14、B 16、A 二、填空题 1、 继承、多态 2、公有 3、类型 个数 4、内置 5、相同的 6、:: 7、500 1000 500 500 8、2 8 9、300 600 10、x=1.6 y=16 z=C X=1.6 y=2 z=C 11、ABCDEFXHI 12、iostream.h string.h 13、(两个空格) 7890 7890 14、64 64 64 5、D 10、D 15、C 21 第三章 类和对象 一、选择题 1、D 2、A 3、D 4、C 5、C 6、A 7、A 8、A 9、C 10、B 11、C 12、D 13、C 14、C 15、C 16、A 17、D 18、C 19、A 20、A 二、填空题 1. 某个对象的引用 2. 值传递,地址传递,引用传递 3. public, private, protected 4. 私有或private 5. Private, protected, public 6. 构造函数 7. 1 8. 静态 9. a 是类Sample 的对象引用,用来作函数Set ( )的形参 10.类名:: 11.当前对象的地址 12. Constructor i = 10 i = 20 13. n=10, k=3 n=20, k=3 n=30, k=3 14. 5 6 7 15.Constructing A Constructing B Destructing B Destructing A 三、编程题 1.解:通常所有数据成员都在构造函数中赋初值。拷贝构造函数以本类的引用为参数。 #include 22 Circle::Circle(double a){ r=a; Area=r*r*3.14159265; Circumference=2*r*3.14159265; } Circle::Circle(Circle & cl){ r=cl.r; Area=cl.Area; Circumference=cl.Circumference; } void Circle::SetR(double R){ r=R; Area=r*r*3.14159265; Circumference=2*r*3.14159265; } void main(){ Circle cl1(2),cl2,cl3=cl1; cout<<\圆半径:\圆周长:\ <<'\\t'<<\圆面积:\ cl2.SetR(4); cout<<\圆半径:\圆周长:\rcumference() <<'\\t'<<\圆面积:\ } 2.#include enum Tsex{mid,man,woman}; class Person{ char IdPerson[19]; //身份证号,18位数字 char Name[20]; //姓名 Tsex Sex; //性别 long int Birthday; //生日,格式1986年8月18日写作19860818 char HomeAddress[50]; //家庭地址 public: Person(char *,char *,Tsex,long int,char *); Person(Person &); Person(); ~Person(); void PrintPersonInfo(); void inputPerson(); }; Person::Person(char *id,char *name,Tsex sex,long int birthday,char *homeadd){ cout<<\构造Person\ strcpy(IdPerson,id); strcpy(Name,name); 23 Sex=sex; Birthday=birthday; strcpy(HomeAddress,homeadd); } Person::Person(){ cout<<\缺省构造Person\ IdPerson[0]='\\0';Name[0]='\\0';Sex=mid; Birthday=0;HomeAddress[0]='\\0'; } Person::Person(Person & Ps){ cout<<\拷贝构造Person\ strcpy(IdPerson,Ps.IdPerson); strcpy(Name,Ps.Name); Sex=Ps.Sex; Birthday=Ps.Birthday; strcpy(HomeAddress,Ps.HomeAddress); } Person::~Person(){ cout<<\析构Person\ void Person::inputPerson(){ char id[19]; //身份证号,18位数字 char name[20]; //姓名 Tsex sex; //性别 long int birthday; //生日,格式1986年8月18日写作19860818 char homeadd[50]; char ch; cout<<\请输入身份证号,18位数字:\ cin.getline(id,19); cout<<\请输入姓名:\ cin.getline(name,20); cout<<\请输入性别m或w:\ cin>>ch; if(ch=='m') sex=man; else sex=woman; cout<<\请输入生日,格式1986年8月18日写作19860818:\ cin>>birthday; cout<<\请输入地址:\ cin.getline(homeadd,50); strcpy(IdPerson,id); strcpy(Name,name); Sex=sex; Birthday=birthday; strcpy(HomeAddress,homeadd); } 24 void Person::PrintPersonInfo(){ long int i; cout<<\身份证号:\姓名:\性别:\ if(Sex==man)cout<<\男\ else if(Sex==woman)cout<<\女\ else cout<<\ cout<<\出生年月日:\ i=Birthday; cout< void main(){ Person Ps1(\朱海鹏\南京市黄浦路1号\ Ps1.PrintPersonInfo(); Ps2.PrintPersonInfo(); Ps3.inputPerson(); Ps3.PrintPersonInfo(); } 25
正在阅读:
C++面向对象技术复习题汇总(含答案)11-22
十佳百优团支部申请材料 - 图文11-26
冬之神韵作文400字07-02
第三章供配电系统计算基础02-02
2016年安徽省中考物理试卷09-09
朱慈勉_结构力学_第4章课后习题(全)06-03
2010年C++笔试试卷(A卷)答案&解析准完整版11-23
第二章补充习题12-09
PEP小学英语三年级上册英语试卷分析04-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 复习题
- 汇总
- 面向
- 对象
- 答案
- 技术