第一周 从 C 到C++
第一周 测验
1、下面程序片段哪个没错?
A、int n = 4; int & r = n * 5;
B、int n = 6; const int & r = n; r = 7;
C、int n = 8; const int & r1 = n; int & r2 = r1;
D、int n = 8; int & r1 = n; const int r2 = r1;
2、下面程序片段输出结果是什么? int a = 1,b = 2; int & r = a; r = b; r = 7; cout << a << endl;
A、1
B、2
C、7
D、8
3、下面说法哪种是对的?
A、常引用所引用的变量,其值不能被修改
B、不能通过常量指针,去修改其指向的变量
C、常量指针一旦指向某个变量,就不能再指向其他变量
D、1+1 = 3
4、表达式 “new int”的返回值类型是:
A、int
B、int *
C、int &
D、void
5、下面小段程序,哪个是正确的:
A、char * p = new char[10]; p[0] = 'K'; delete [] p;
B、int *p = new int[25]; p[10] = 100; delete p
C、char * p = new int; p = 'a'; delete p;
D、int * p = new char[20];
6、下面说法正确的是:
A、多个重载函数的参数个数必须不同。
B、两个函数,参数表相同,返回值类型不同,它们是重载关系。
C、调用一个第二个和第三个参数都有有缺省值的函数时,可以不写第二个实参而写第三个实参。
D、使用内联函数的目的是提高程序的运行速度。
7、简单的swap ,补充代码是
8、难一点的swap,补充代码是
9、好怪异的返回值 补充代码是
10、int num=50; int ref&=num; ref=ref+10; num=num+40 cout<
第二周 类和对象基础
第二周测验
1、有类A如下定义: class A { int v; public: A ( int n) { v = n; } }; 下面哪条语句是编译不会出错的?
A、A) A a = new A();
B、B) A a2;
C、C) A * p = new A();
D、D) A a1(3);
2、假设 A 是一个类的名字,下面的语句生成了几个类A的对象? A * arr[4] = { new A(), NULL,new A() };
A、A) 1
B、B) 2
C、C) 3
D、D) 4
3、假设A 是一个类的名字,下面哪段程序不会用到A的复制构造函数?
A、A) A a1,a2; a1 = a2;
B、B) void func( A a) { cout << "good" << endl; }
C、C) A func( ) { A tmp; return tmp; }
D、D) A a1; A a2(a1);
4、类A定义如下: class A { int v; public: A(int i) { v = i; } A() { } }; 下面哪段程序不会引发类型转换构造函数被调用?
A、A) A a1(4)
B、B) A a2 = 4;
C、C) A a3; a3 = 9;
D、D) A a1,a2; a1 = a2;
5、假设A是一个类的名字,下面的程序片段会调用类A的调用析构函数几次? int main() { A * p = new A[2]; A * p2 = new A; A a; delete [] p; }
A、A) 1
B、B) 2
C、C) 3
D、D) 4
第三周 类和对象提高
第三周测验
1、1) 以下说法不正确的是:
A、静态成员函数中不能使用this指针
B、this指针就是指向成员函数所作用的对象的指针
C、每个对象的空间中都存放着一个this指针
D、类的非静态成员函数,真实的参数比所写的参数多1
2、2) 下面说法哪个不正确?
A、静态成员函数内部不能访问同类的非静态成员变量,也不能调用同类的非静态成员函数
B、非静态成员函数不能访问静态成员变量
C、静态成员变量被所有对象所共享
D、在没有任何对象存在的情况下,也可以访问类的静态成员
3、3) 以下说法正确的是:
A、成员对象都是用无参构造函数初始化的
B、封闭类中成员对象的构造函数先于封闭类的构造函数被调用
C、封闭类中成员对象的析构函数先于封闭类的析构函数被调用
D、若封闭类有多个成员对象,则它们的初始化顺序取决于封闭类构造函数中的成员初始化列表
4、4) 以下关于友元的说法哪个是不正确的?
A、一个类的友元函数中可以访问该类对象的私有成员
B、友元类关系是相互的,即若类A是类B的友元,则类B也是类A的友元
C、在一个类中可以将另一个类的成员函数声明为友元
D、类之间的友元关系不能传递
5、假定C为一个类,则下面为该类的拷贝构造函数的原型说明是:
A、C(C x);
B、C(C& x);
C、void C(C x)
D、void C(C &x)
6、假设A是一个类,则语句A a[2],*p[3];调用构造函数的次数为:
A、0
B、2
C、3
D、5
7、下面关于析构函数的说法正确的是
A、系统不会提供默认的析构函数
B、析构函数可以重载
C、一个类只有一个析构函数
D、析构函数可以设置默认值
第四周 运算符重载
第四周测验
1、1)如果将 [ ] 运算符重载成一个类的成员函数,则该重载函数有几个参数?
A、0
B、1
C、2
D、3
2、2)以下说法正确的是:
A、成员对象都是用无参构造函数初始化的
B、封闭类中成员对象的构造函数先于封闭类的构造函数被调用
C、封闭类中成员对象的析构函数先于封闭类的析构函数被调用
D、若封闭类有多个成员对象,则它们的初始化顺序取决于封闭类构造函数中的成员初始化列表
3、3)重载“<
A、可以将"<
B、可以将"<
C、可以将"<
D、可以将"<
4、4)如何区分自增运算符重载的前置形式和后置形式?
A、重载时,前置形式的函数名是 ++ operator,后置形式的函数名是 operator ++
B、后置形式比前置形式多一个 int 类型的参数
C、无法区分,使用时不管前置形式还是后置形式,都调用相同的重载函数
D、前置形式比后置形式多了一个int类型的参数
5、下列运算符中,不能被重载的是:
A、[ ]
B、.
C、( )
D、/
6、下列描述重载运算符的规则中,不正确的是?
A、重载运算符必须符合语言语法
B、不能创建新的运算符
C、不能改变运算符操作的类型
D、不能改变运算符原有的优先级
7、关于友元函数的描述中,不正确的是?
A、友元函数是成员函数,它被说明在类体内
B、友元函数可直接访问类中的私有成员
C、友元函数破坏封装性,使用时尽量少用
D、友元函数不是类的成员函数
第五周 继承
第五周测验
1、1) 如果多种事物,有一些共同的特点,又有一些各自不同的特点,如何编写类来代表这些事物比较合适?
A、为每种事物独立编写一个类,各类之间互相无关
B、写一个类代表其中一种事物,代表其他事物的类,都从这个类派生出来
C、概括所有事物的共同特点,写一个基类。然后为每种事物写一个类,都从基类派生而来
D、一共就写一个类,包含所有事物的所有特点,然后用一个成员变量作为标记来区分不同种类的事物
2、2) 以下哪种派生关系是合理的
A、从“虫子”类派生出“飞虫”类
B、从“点”类派生出“圆”类
C、从“狼”类派生出“狗”类
D、从“爬行动物”类派生出“哺乳动物”类
3、3) 派生类和基类有同名同参数表的成员函数,这种现象:
A、叫重复定义,是不允许的
B、叫函数的重载
C、叫覆盖。在派生类中基类的同名函数就没用了
D、叫覆盖。体现了派生类对从基类继承得到的特点的修改
4、4) 以下说法正确的是:
A、派生类可以和基类有同名成员函数,但是不能有同名成员变量
B、派生类的成员函数中,可以调用基类的同名同参数表的成员函数
C、派生类和基类的同名成员函数必须参数表不同,否则就是重复定义
D、派生类和基类的同名成员变量存放在相同的存储空间
5、5) 以下说法正确的是:
A、派生类对象生成时,派生类的构造函数先于基类的构造函数执行
B、派生类对象消亡时,基类的析构函数先于派生类的析构函数执行
C、如果基类有无参构造函数,则派生类的构造函数就可以不带初始化列表
D、在派生类的构造函数中部可以访问基类的成员变量
6、下面叙述不正确的是:
A、基类的保护成员在保护派生类中仍然是保护的
B、基类的保护成员在公有派生类中仍然是保护的
C、基类的保护成员在私有派生类中仍然是保护的
D、对基类的保护成员的访问必须是无二义性
7、派生类的对象对它的基类成员可以访问的是?
A、公有继承的公有成员
B、公有继承的私有成员
C、公有继承的保护成员
D、私有继承的公有成员
第六周 多态
第六周测验
1、函数被称为虚函数,是因为使用了什么关键字?
A、virtual
B、private
C、public
D、protected
2、在C++中,要实现动态联编,必须使用什么调用虚函数?
A、类名
B、派生类指针
C、对象名
D、基类指针
3、下列函数中,可以作为虚函数的是
A、普通函数
B、静态成员函数
C、构造函数
D、析构函数
4、下面函数原型声明中,为纯虚函数的是
A、void func( )=0;
B、virtual void func()=0;
C、virtual void func( );
D、virtual void func( ){ };
5、抽象类中只能有一个纯虚函数
6、构造函数和析构函数都不能说明为虚函数
第七周 输入输出和模板
第七周测验
1、进行文件输入输出操作时,应包含文件
A、ifstream
B、ofstream
C、fstream
D、iostream
2、在打开磁盘文件的访问常量中,表示追加方式打开的有
A、ios::in
B、ios::out
C、ios:app
D、ios::ate
3、下列控制符,设置输出宽度的是
A、ws
B、setw
C、endl
D、setfill
4、下列选项中,是ostream类的对象有
A、cerr
B、cout
C、cin
D、clog
5、下列语句以写的方式打开文件的是
A、fstream infile("1.txt",ios::in);
B、fstream infile("1.txt",ios::app);
C、fstream infile("1.txt",ios::out);
D、ofstream infile("1.txt")
期中测试
面向对象程序设计期中模拟客观题部分
1、关于类和对象不正确的说法是 。
A、类是一种抽象数据类型
B、对象是类的实例
C、一个类的对象只有一个
D、对象必属于某个类
2、对象之间的消息传递是通过 ?
A、继承实现
B、调用成员函数实现
C、封装实现
D、函数重载实现
3、下面关于内联函数,说法正确的是 。
A、内联函数会增加函数调用的开销
B、内联函数的扩展是编译时期完成的
C、内联函数必须在类体内定义
D、内联函数将减少目标代码的大小
4、采用函数重载的目的在于 。
A、使用方便自然,程序可读性强
B、减少空间
C、提高速度
D、代码共享
5、假定C为一个类,则为该类的拷贝构造函数的原型说明是 。
A、C(C x);
B、C(C &x);
C、void C(C & x);
D、void C(C x);
6、虚基类的主要作用是 。
A、简化程序
B、消除二义性
C、提高运行效率
D、减少目标代码长度
7、派生类的成员函数,不可以访问的是 。
A、私有继承的基类的公有成员
B、私有继承的基类的保护成员
C、公有继承的基类的私有成员
D、保护继承的基类的公有成员
8、假设A是个类,则语句 A a [2],* p [3]; 调用构造函数的次数为
A、0
B、2
C、3
D、5
9、下面关于析构函数的说法正确的是 。
A、系统不会提供默认的析构函数
B、析构函数可以重载
C、一个类的析构函数是唯一的
D、析构函数可以设置默认参数
10、关于 this 指针的说法错误的是 。
A、this 是常量
B、this 指针存放的是对象的地址。
C、非静态成员函数可以使用this指针
D、this是一个指针,而不是关键字
11、不属于ostream类对象的是 。
A、cin
B、cout
C、cerr
D、clog
12、若obj是A类的对象,假设有如下形式代码 obj.fun( 10 ), 则成员函数fun在A类中的声明错误的是 。
A、void fun( const int a);
B、void fun (int & a);
C、void fun(const int & a);
D、void fun( int ) const ;
13、下面的哪一个函数声明不正确_ __ 。
A、void fun(int ,int )
B、void fun(int ,int=0)
C、void fun (int =0,int =0)
D、void fun(int=0,int )
14、下列对派生类的描述中,错误的是_________。
A、派生类可以作为另一个类的基类
B、派生类的缺省继承方式是私有
C、派生类可以有多个基类
D、派生类对象只继承了基类的公有成员和保护成员
15、可以成为虚函数的是 。
A、构造函数
B、析构函数
C、静态成员函数
D、前三者都不可
16、假设A为抽象类,下列函数声明正确的是 。
A、void fun( A a);
B、void fun( A & );
C、A fun (int);
D、A* fun(A)
17、定义下列运算符重载时,不能采用成员函数形式的是 。
A、[ ]
B、=
C、+
D、<<
18、关于静态成员的说法错误的是
A、静态成员由类的各个对象的共享
B、静态成员函数不可以访问非静态数据成员
C、静态成员函数拥有this指针
D、非静态成员函数可以访问静态数据成员
19、关于友元函数的描述中,错误的是 。
A、友元函数是成员函数,它被说明在类体内
B、友元函数可直接访问类中的私有成员
C、友元函数破坏封装性
D、友元类中的所有成员函数都是友元函数
20、在C++中,容器是一种 。
A、类
B、对象
C、函数
D、类模板
面向对象程序设计期中模拟主观题部分
1、清简述运行期绑定和编译期绑定的区别? C++中实现多态的三个前提条件是什么?
2、请举例说出const的至少两种用法。
3、请简述一下类的成员用protected和private两种方式定义有什么异同点?
4、声明一个Circle类,有数据成员Radius(半径)、成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。
5、Point类表示坐标点类,根据下列程序调用的结果,给出类的定义。 void main() { Point a(1,3),b(3,1); //生成两个对象a,b if(a = = b ) //对象使用比较运算符==判断是否相等 cout << "a ,b 相等 "<
6、编写一个函数模板,利用它可以对具有n个元素的数组a[ ]求最大值。
7、编写程序,定义一个抽象基类Person,Person类有纯虚成员函数Display,从Person分别派生出Teacher和Student类,它们都只有数据成员name。 (1)请定义类并实现完成初始化的构造函数;(6分) (2)实现Teacher类Display函数,输出“I am a teacher!”;实现Student类Display函数,输出“I am a student!”;(4分) (3)用主函数main()测试以上功能。(2分)
复习测试1
复习测试1
1、模仿二维数组,使用引用调用和引用返回,把函数代码补完整。 struct twodim{ int r; int c; float *a; }; void get_twodim(twodim&s,int row,int col) { //初始化数组 } float & val(twodim&s, int i,int j) { //返回i行j列的值 } void free_twodim(twodim &s) { //释放数组空间 } void main() { struct twodim s; int i,j; get_twodim(s,3,4); for(i=0;i<3;i++) for(j=0;j<4;j++) val(s,i,j)=5; for(i=0;i<3;i++) { for(j=0;j<4;j++) cout<
专为16级补考重修,其他同学不要进入
补修重修试题
1、用struct定义类和用class定义类默认的访问权限分别是什么?类继承时缺省的继承方式是什么?
2、拷贝构造函数何时被调用?
3、简述在protected继承方式下基类成员的访问权限?
4、现定义一个Triangle类如下: class Triangle{ private: double side1,side2,side3; public: Triangle ( ){ side1=side2=side3=1;} Triangle (int s1,int s2,int s3){side1=s1; side2=s2; side3=s3; } }; void main() { Triangle a(3,4,5); //(1) Triangle b(a);//(2) Triangle c; //(3) } 请回答(1)、(2)、(3)依次调用了哪个构造函数?
5、声明一个Circle类,有数据成员Radius(半径)、成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。
6、定义了一实部为real,虚部为imag的复数类complex,并在类中重载运算符,实现复数二元加、减及输入运算。
7、编写程序,定义一个抽象基类Person,Person类有纯虚成员函数Display,从Person分别派生出Teacher和Student类,它们都只有数据成员name。 (1)请定义类并实现完成初始化的构造函数;(6分) (2)实现Teacher类Display函数,输出“I am a teacher!”;实现Student类Display函数,输出“I am a student!”;(6分) (3)用主函数main()测试以上功能。(3分)
8、定义一个函数模板,该函数的功能是将数组a中的元素逆序。
复习测试2
复习卷2
1、设计一个Pair类,Pair类声明如下: class Pair { public: //添加函数 private: int first; int second; }; 要求: 1、添加构造函数,完成初始化。5分 2、为每个数据成员添加设置和读取值的成员函数 5分 3、定义一个成员函数,完成first和second两个数据成员值的交换 5分
2、从上题中的Pair类中派生出一个分数类Fractor; class Fractor:public Pair { }; 其中,first充当分子,second充当分母。 1、定义成员函数,检查分母不能为0问题。使得能正确完成分数对象的初始化。5分 2、添加成员函数,完成分数化简,例如:4/8应化简为1/2。 10分
复习测试3
复习试卷3
1、某学校对教师每月工资的计算规定如下:固定工资+课时补贴;教授固定工资5000元,每课时50元;副教授固定工资3000元,每课时30元;讲师固定工资2000元,每课时20元。定义教师抽象类,派生出不同职称的教师类,编写程序求若干个教师的月工资
2、分数类Fractor定义如下: class Fractor{ private: int fenmu,fenzi; }; 1、添加构造函数完成初始化 (5分) 2、重载运算符==,判断两个分数是否相等 (5分) 3、添加输出运算符<
面向对象模拟测试
面向对象客观题部分
1、下面函数声明正确的是( )
A、f (int x ,int y);
B、void f (x , y);
C、void f(int x , y)
D、void f (int , int);
2、下列的各类函数中,( )不是类的成员函数。
A、构造函数
B、析构函数
C、友元函数
D、自定义的构造函数
3、重载函数调用时选择的依据中,没有( )。
A、参数个数
B、函数的类型
C、函数名字
D、参数类型
4、关于成员函数特征的下列描述中,错误的是( )
A、成员函数一定是内联函数
B、成员函数可以是静态的
C、成员函数可以重载
D、成员函数可以设置缺省参数
5、执行下面语句后, int a = 5, b = 10, t ; int &ra = a ; int &rb = b; t = ra ; ra = rb ; rb = t ; a和b的值分别为( )
A、10和10
B、10和5
C、5和10
D、5和5
6、下列对抽象基类的描述中,( )是抽象基类的独有特性。
A、可以定义虚函数
B、不能定义其对象
C、可以定义友元函数
D、可以进行构造函数重载
7、下述静态数据成员的描述中,错误的是( )。
A、说明静态数据成员是前边要加修饰符static
B、静态数据成员要在类声明体外初始化
C、静态数据成员不是所有对象共有的
D、引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符
8、假设OneClass为一个类,则该类的拷贝构造函数的声明语句为( )。
A、OneClass(OneClass p)
B、OneClass(OneClass & p);
C、OneClass& (OneClass p);
D、OneClass (OneClass *p);
9、下列对派生类的描述中,错误的是( )。
A、派生类只含有基类的公有成员和保护成员
B、派生类的缺省继承方式是private
C、派生类至少有一个基类
D、一个派生类可以作为另一个派生类的基类
10、设有以下类的定义: class Ex { int x; public: void setx(int t=0); }; 若在类外定义成员函数setx(),以下定义形式中正确的是( )
A、void setx(int t) { }
B、void Ex::setx(int t) { }
C、Ex::void setx(int t) { }
D、void Ex::setx( ){ }
11、关于多继承二义性的描述,( )是错误的。
A、派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性
B、一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性
C、解决二义性最常用的方法是通过作用域解析符对成员进行限定
D、派生类和它的基类中出现同名函数时,将可能出现二义性
12、设有基类定义: class Cbase { private: int a; protected: int b; public: int c; }; 派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )
A、私有继承
B、保护继承
C、公有继承
D、私有、保护、公有均可
13、C++对C语言作了很多改进,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。
A、增加了一些新的运算符;
B、引进了类和对象的概念;
C、规定函数说明必须用原型;
D、允许函数重载,并允许设置缺省参数;
14、下列运算符中,( )不能重载。
A、+
B、[ ]
C、::
D、new
15、关于delete运算符的下列描述中,( )是错误的。
A、使用它删除对象时会自动调用析构函数;
B、对一个指针可以连续使用多次该运算符;
C、指针名前有一对方括号符号,代表删除的是一组对象。
D、它必须用于new返回的指针;
16、下面对构造函数的不正确描述是( )
A、编译系统可以提供默认的构造函数。
B、构造函数可以有参数,所以也可以有返回值
C、构造函数可以重载。
D、构造函数可以设置默认参数。
17、以下关于类模板叙述正确的是( )。
A、类模板是一个具体类型类
B、类模板的类型参数是具体的数据类型
C、通过使用不同的类型参数,模板类可以生成不同类型的类
D、能用类模板直接定义的对象
18、下面描述中,不正确的是( )
A、虚函数是没有实现的函数
B、纯虚函数的实现在派生类进行
C、抽象类是具有纯虚函数的类
D、抽象类指针可以指向不同的派生类对象
19、在C++中,容器是一种( ).
A、类
B、对象
C、函数
D、类模板
20、虚基类的主要作用是( )
A、简化程序
B、消除二义性
C、提高运行效率
D、减少目标代码
面向对象主观题部分
1、分数类Fractor定义如下: class Fractor{ private: int fenmu,fenzi; }; 1、添加构造函数完成初始化 2、重载运算符==,判断两个分数是否相等 3、添加输出运算符<
2、定义一个函数模板,该函数的功能是将一维数组a中的元素逆序
3、实现一个类层次管理整数数组,基类intArray为一维数组,派生类Maxtrix为二维数组,Array3D为三维数组。请参照基类intArray的定义,完成派生类Matrix和Array3D的定义。其中intArray定义如下: class intArray{ public: intArray(int count) { ar=new int[count]; n=count; } int & elem(int i) { return ar[i]; } void print( ) { int i; for(i=0;i
4、某学校对教师每月工资的计算规定如下:固定工资+课时补贴;教授每课时50元;副教授每课时30元;讲师每课时20元。定义教师抽象类,派生出不同职称的教师类,编写程序求若干个教师的月工资。 职称 等级 每月固定工资(元) 教授 一级 8000 二级 7500 副教授 一级 7000 二级 6000 三级 5000 讲师 4500
面向对象程序设计期末考试6.19日
面向对象程序设计客观题部分
1、C++中,关于函数设置参数默认值的描述中,( )是正确的。
A、不允许设置参数的默认值
B、设置参数默认值只能在定义函数时设置
C、设置参数默认值时,应先设置右边的再设置左边的
D、设置参数默认值时,应该全部参数都设置
2、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( )合适。
A、重载函数
B、内联函数
C、递归调用
D、嵌套调用
3、关于析构函数的说法正确的是( )
A、一个类中只能定义一个析构函数
B、析构函数名与类名没有关系
C、析构函数可以有一个或多个参数
D、析构函数的定义只能在类体内
4、已知类A中一个成员函数说明如下: void set(A& a); 其中,A& a的含义是( )。
A、指向类A的指针为a
B、将a的地址值赋给变量set
C、a是类A的对象引用,用来做函数set( )的形参
D、变量A与a按位逻辑与,作为函数set()的参数
5、关于new运算符的下列描述中,错误的是( )
A、它可以用来动态创建对象和对象数组
B、使用它创建的对象活对象数组应使用运算符delete删除
C、使用它创建对象时要调用构造函数
D、使用它创建对象数组时必须指定初始值
6、派生类对象对基类成员中的( )是可以访问的。
A、公有继承的公有成员
B、公有继承的私有成员
C、继承的保护成员
D、私有继承的公有成员
7、派生类对基类继承的传递性中,( )是错误的。
A、在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数去访问基类的私有数据成员
B、在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数去访问基类的私有数据成员
C、在私有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数去访问基类的私有数据成员
D、不管是私有继承还是公有继承,基类的私有成员在派生类的作用域内都是不可见的。
8、下列函数中,不能重载的是( )。
A、成员函数
B、非成员函数
C、析构函数
D、构造函数
9、下列关于运算符重载的描述中,正确的是()。
A、运算符重载可以改变运算量的个数
B、运算符重载可以改变优先级
C、运算符重载可以改变结合规则
D、运算符重载可以不可以改变语法结构
10、下列关于动态联编的描述中,错误的是( )
A、动态联编是以虚函数为基础的
B、动态联编在程序运行时确定所调用的函数代码块
C、动态联编调用多态函数时通过基类对象的指针或基类对象的引用
D、动态联编是在编译时确定调用某个函数
11、下列关于虚函数的描述中,正确的是( )。
A、虚函数是一个static类型的成员函数
B、虚函数是一个非成员函数
C、基类中说明了虚函数后,其派生类中的对应函数可不必重新声明是虚函数
D、基类中的虚函数和其派生类中的虚函数只要同名就能满足多态形成的条件
12、进行文件操作时需要包含()文件
A、ostream
B、fstream
C、cstdio
D、cstdlib
13、C++类体系中,不能被派生类继承的有( )。
A、成员函数、构造函数
B、构造函数、赋值运算符重载函数
C、虚函数、静态成员函数
D、静态成员函数、成员函数
14、类模板的使用实际上是将类模板实例化成一个具体的()
A、类
B、对象
C、函数
D、类模板
15、#include using namespace std; void main() { int **p,*p1,i=10; p1=&i; p=&p1; cout<
A、10
B、i的地址
C、p1的地址
D、运行出错
16、关于 this 指针的说法错误的是( )
A、this 指针的值不可改变。
B、this 指针存放的是对象的地址信息。
C、成员函数拥有this指针。
D、静态成员函数拥有this指针。
17、下列表示引用的方法中,( )是正确的。已知: int m=10;
A、int &x=m;
B、int &y=10;
C、int &z;
D、float &t=&m;
18、通常拷贝构造函数的参数是( )
A、某个对象名
B、某个对象的指针名
C、某个对象的成员名
D、某个对象的引用名
19、语句ofstream f, f.open(“a.txt”)的功能是建立流对象f,试图打开文件a.txt并与之连接,并且( )
A、若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B、若文件存在,将其置为空文件;若文件不存在,打开失败
C、若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D、若文件存在,打开失败;若文件不存在,建立一个新文件
20、在C++程序中,对象之间的相互通信通过( )
A、继承实现
B、调用成员函数实现
C、封装实现
D、函数重载实现
面向对象程序设计主观题部分
1、分析下面的类体系。 #include using namespace std; class A{ public: void f(string s) { m=s;} string m; }; class B: public A{ public: void f(int t){m=t;} int m; }; 如果定义一个B类型对象b, B b; 回答下列问题 (1) 对象b中访问数据成员m是否会引起二义性? (2) 写出通过对象b调用f(string s)和f(int t)的语句。
2、现定义一个Clock类如下: class Clock{ private: int hour,minute,seconds; public: Clock( ) { Hour=12,minute=0,seconds=0; } Clock(int h,int m,int s) { Hour=h,minute=m,seconds=s; } }; void main() { Clock a(9,30,0); //(1) Clock b(a);//(2) Clock c; //(3) } 请回答(1)、(2)、(3)处分别调用了哪个构造函数?
3、封装、继承、多态是面向对象程序设计的三大特性,简要概述一下你对它们的理解和认识。
4、设计一个Array3D类,描述三维整型数组。 (1) 要求有构造函数完成初始化 (2) 重载运算符(),通过运算符()能访问数组中任意元素
5、定义一个函数模板,完成一维数组a中元素从大到小排列。
6、设计一个抽象类来描述基类火车票,然后由基类火车票类派生出高铁票和硬座票。 1、要求各类能计根据位次类型和里程数,计算出票价,票价计算方法为某一种车票的单位里程票价乘以里程数。 2、要求各类计算票价的函数作为虚函数,用多态实现不同类型火车票计算票价。 参考数据: 车票类型 位次类型 单位里程票价(元/公里) 高铁票 商务座 1.1 一等座 0.8 二等座 0.5 硬座票 空调硬座 0.2 普通硬座 0.17