搜索
您的当前位置:首页C++试题

C++试题

来源:爱问旅游网
判断题

1构造函数、析构函数、友元函数都属于类的成员函数。 2静态数据成员是类的所有对象共享的数据。 3 可以将派生类的对象的值赋给基类对象,也可以将基类对象的值赋给派生类对象。

4 派生类默认的继承方式为public。

5 类模板实例化的过程是类模板->模板类->对象。 6 多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。

7 构造函数可以重载,析构函数也可以重载。

8 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。

9 设A为类,则A类的复制构造函数原型声明为void A(A&)。 10 在公有继承中,基类中只有公有成员对派生类是可见的。

11 在公有继承中,基类的公有成员和私有成员在派生类中都是可见的。

12 虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对象的问题。

13 派生类是从基类派生出来,他不能生成新的派生类。

14 当一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针后,再调用成员函数。

15 对象是属性和行为的集合。

16 模板的使用是为了加强类的封装性。

17 函数定义时在函数参数表后加=0表示该函数为纯虚函数。 18 可以以”类名::静态成员函数(实参表)”和“对象.静态成员函数(形参表)”两种形式调用类的静态成员函数。

19 语句Int a(5),*p; *p=a;能够正常执行。

20 设A为类,则A *(*fpA[5])()的正确描述是:fpA是一个数组,数组的5个元素都是A类对象。

21 重载双目运算符为成员函数时,一般将左操作数作为函数的参数。

22 可以将插入运算符“ <<”和提取运算符“ >> ”重载为类的成员函数。 23 C++语言中,即允许单继承,又允许多继承。

24 派生类的继承方式有两种:公有继承和私有继承。

25 在私有继承中,基类中所有成员对派生类的对象都是不可见的。 26 在保护继承中,对于垂直访问同于公有继承,而对于水平访问同于私有继承。 27 派生类是它的基类的组合。 28 构造函数可以被继承。 29析构函数不能被继承。 30子类型是不可逆的。

31 只要类M继承了类N,就可以说类M是类N的子类型。

32 如果A类型是B类型的子类型,则A类型必然适应于B类型。

33 多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。

34 单继承情况下,派生类对基类的成员的访问也会出现二义性。

35 解决多继承情况下出现的二义性的方法之一就是使用成员名限定法。

答案:1-5 FTFFT 6-10 TFTTF 11-15 TTFTT 16-20 FFTFF 21-25 FFTFF 26-30 TTTTT 31-35 FFTFT

单选题

1 派生类的构造函数的成员初始化列中,不能包含()。 A 基类的构造函数

B 派生类中子对象的初始化 C 基类的子对象的初始化

D 派生类中一般数据成员的初始化

2 面向对象程序设计思想的主要特征不包括()。 A 继承性

B功能分解,逐步求精 C 封装性和信息隐藏 D 多态性

3 面向对象程序设计中,()为程序的组单元。 A 语句 B类

C主函数 D子函数

4 假设已经有定义char *const name=“chen”;下面的语句正确的是:() A name[3]=’q’; B name =”lin”; C name=new char[5]; D cout<5 下列声明语句没有起到定义作用的是() A int count;

B const double pi=3.1415;

C int max(int a,int b){return a>b?a:b;} D extern long index;

6 在C++语言中,函数返回值的类型是由()定义的 A return语句中的表达式类型 B 定义该函数时所指定的函数类型 C 调用该函数时的主调用函数类型 D 调用函数是系统临时

7 面向对象程序设计思想的主要特征不包括() A 继承性B 功能分解,逐步求精 C 封装性和信息隐藏D 多态性

8 面向对象程序设计中,( )为程序的组成单元。 A 语句 B 类

C 主函数 D 子函数

9在派生类中重新定义虚函数时,除了()方面,其他方面都必须与基类中相应的虚函数保持一致。 A 参数个数 B 参数类型 C 函数名称 D 函数体

10 有关运算符重载正确的描述是( )

A C ++语言允许在重载运算符时改变运算符的操作个数 B C++语言允许在重载运算符时改变运算符的优先级 C C++语言允许在重载运算符时改变运算符的结合性 D C++语言允许在重载运算符时改变运算符的原来的功能

11 若MyClass 为一个类,执行“MyClass a [3],*p[4];”语句时会自动调用该类构造函数的次数是() A 4 B 3 C 2 D 7

12 对new 运算符的下列描述中,()是错误的 A 它可以动态创建对象和对象数组 B 用它创建对象数组是必须指定初始值 C 用它创建对象时要调用构造函数

D用它创建的对象可以使用运算符delete来释放

13 在类外不能访问类私有成员属于类的()特征 A 封装 B 继承 C 多态 D 抽象

14 namespace 与 class ,struct,union和enum有着明显的区别,下面说法错误的是()

A namespace在能在全局范围内定义,但他们之间可以相互嵌套 B 在namespace定义的结尾,右花括号的后面不必跟一个分号

C 一个namespace 可以在多个头文件中用一个标示符定义,就好像重复定义一个类一样

D namespace可以把全局名字空间当成一个小空间来管理

15在C++语言中,数据封装要解决的问题是() A 避免数据丢失B 数据的规范化 C防止不同模块之间的数据非法访问 D便与数据转换

16 已知print()函数是一个类的常量成员函数,它无返回值 ,下列表示中()是正确的

A void print()const B const void print() C void const print() D void print(const)

17 以下正确的函数原型为() A func(int x;int y); B void(x,y);

C void(int x ,y);

D void func(int,int);

18 为了避免在嵌套的条件语句if-else 中产生二义性,C++规定:else子句总是与()配对。

A 缩排位置相同的if B 和其之前最近if C 和其之后最近if D 同一行上的if

19 对于一个功能不太复杂,并且要求加快执行速度,选用()合适 A 内联函数 B 重载函数 C 递归调用 D 嵌套调用

20 编译时的多态性可以通过使用()获得 A 虚函数和指针

B 重载函数和析构函数 C 虚函数和对象 D 虚函数和引用

21、类O定义了共有函数F1。P和Q为O的派生类,定义为class p:protected o(„);

class Q:public O(„)。则可以访问F1的是( )。 A O、P、Q类的对象 B P、Q类的对象 C O、Q类的对象 D O类的对象

22、A类定义如下,编译时有错误的行是( )。 class A{ int a;//1行 public:

~A(int);//2行 A();//3行

A(int);//4行 };

A 1 B 2 C 3 D 4

23、有如下程序: #include using namespace std; class CD {public:

~CD(){cout<<‘C’;} private:

char name[80]; };

int main(){CD a,*b,d[2];return 0;} 运行时的输出结果是( )

A CCC B CCCC C CC D C

24、要实现动态联编,必须通过( )调用虚函数。

A 对象指针 B 成员名限定 C 对象名 D 派生类名

25、下面对于友元函数描述正确的是( ) A友元函数的实现必须在类的内部定义 B友元函数是类的成员函数

C友元函数破坏了类的封装性和隐藏性 D友元函数不能访问类的私有成员

26、设有如下定义int(*ptr)();, 下面关于ptr正确的叙述是( ) A ptr是指向一维数组的指针变量 B ptr是指向int型数据的指针变量

C ptr是指向函数的指针,该函数返回一个int型数据。

D ptr是一个函数名,该函数的返回值是指向int型数据的指针

27、使用重载函数编程序的目的是( ) A 使用相同的函数名调用功能相似的函数 B 共享程序代码

C 提高程序的运行速度 D 节省存储空间

28、在派生类中重新定义虚函数时,除了( )方面,其他方面都必须与基类中相应的虚函数保持一致。 A 参数个数B 参数类型 C 函数名称D 函数体

29、有如下函数模板定义: template

T func (T x,T y){return x*x+y*y;} 在下列对func的调用中,错误的是( ) A func(5,11); B func(3.6,5.8); C func(4,9.4); D func(‘b’,‘c’);

30、构造函数是在( )时被执行的 A 程序编译 B 创建对象 C 创建类

D 程序装入内存

31、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是( ) A virtual show()=0; B virtual void show(); C virtual void show()=0; D void show()=0 virtual;

32、下列函数模板定义中,不合法的是( ) A templateT1 foo(T1,T1) B templateTT foo(float *);

C inline templateT foo(T,unsigned int *); D TemplateCtype foo(Ctype a,Ctype b);

33、对象之间的联系纽带是( ) A 方法 B 多态性 C 属性 D 消息

34.UML中逻辑视图的作用是()

A描述系统的功能需求,找出用例和执行者 B描述如何实现系统内部的功能

C描述系统代码构件组织和实现模块,及它们之间的依赖关系 D描述系统的并发性,并处理这些线程间的通信和同步

35.在下面有关析构函数特征的描述中,正确的是( ) A一个类中利用定义多个析构函数 B析构函数名与类名完全相同 C析构函数不能指定返回类型 D析构函数可以有一个或多个参数

36,使用派生类的主要原因是( )

A提高代码的可重用性 B提高程序的运行效率 C加强类的封装性 D实现数据的隐藏

37.有关运算符重载正确的描述是( )

A C++语言允许在重载运算符时改变运算符的操作个数 B C++语言允许在重载运算符时改变运算符的优先级 C C++语言允许在重载运算符时改变运算符的结合性 D C++语言允许在重载运算符时改变运算符的原来的功能

38.对于一个功能不太复杂,并且要求加快执行速度,选用( )合适。 A内联函数 B重载函数 C递归调用 D嵌套调用

39.运行时的多态性可以通过使用( )获得 A虚基类 B重载函数 C虚函数 D引用基类

40.模板的使用时为了( ) A提高代码的可重用性 B提高代码的运行效率 C加强类的封装性 D实现多态性

41.下列关于this指针的叙述中,错误的是( ) A 类的成员函数都有this指针

B this隐含于每个类的非静态成员函数中 C this指针是成员函数所属对象的指针 D this指针不能显示定义

42.模板的使用是为了( ) A提高代码的可重用性 B提高代码的运行效率 C加强类的封装性 D实现多态性

43.以下有关静态数据成员函数的叙述不正确的是( ) A 静态成员函数属于整个类

B 对静态成员函数的引用不允许使用对象名

C 在静态成员函数中不能直接引用类的非静态成员 D 使用类名可以直接调用其静态成员函数 44.以下( )成员函数表示纯虚函数。 A.virtual int vf(int); B.void vf(int)=0; C.virtual void vf(int); D.virtual void vf()=0:; 45 .在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。则operator有几个参数,operator*有几个参数。( ) A 1、2 B 2、1 C 2、2 D 1、1

46.在下列函数原型中,可以作为类AA构造函数的是( ) A.void AA(int); B. int AA(); C.AA(int)const; D. AA(int);

47.可以用p.a的形式访问派生类对象p的基类成员a,其中a是( ) A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员

48.下列关于对象概念的描述中,( )是错误的。 A.对象就是C语言中的结构变量

B.对象代表着正在创建的系统中的一个实体

C.对象就是一个状态和操作(或方法)的封装体 D.对象之间的信息传递是通过消息进行的

49.下列有关类的说法不正确的是( )。 A.对象是类的一个实例

B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象

D.类与对象的关系和数据类型与变量的关系相似

答案:1-5 CBBBD 6-10 BBBDD 11-15 BBACC 16-20 ADBAA 21-25 ABAAC 26-30 CADCB 31-35 CCDAC 36-40 ADACA 41-45 AACCC 46-49 DDAC

程序设计题

1. 编写一个具有复制构造函数及传值构造函数,带字符数组指针的字符串类。

2. 编写一个程序,设计一个产品类product,其定义如下: Class product {

Char *name; //产品名称 int price; //产品单价 int quantity; //剩余产品数量 public:

product(char *n,int p,int q); //构造函数 ~product(); //析构函数 void buy(int money); //购买产品

void get() const; //显示产品剩余产品数量 };

并用数据进行测试。

3.以面向对象的方法设计一个类,此类包含3个私有数据:unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油格价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。

4.编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算函数长方形的总面积)时使用对象作为参数。

5.编一个程序计算正方形、球体和圆柱体的表面积和体积。要求:抽象出一个公共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。由该抽象类派生出的三个类,都有求表面积和体积的实际定义。键盘输入radius的值后,可以输出这3种立方体的面积。

6.CFrcation为分数类。使用该类完成分数的加、减运算。类定义如下: class CFraction {

int numerator; //分子 int denominator; //分母 public:

CFraction(int num=0,int deno =1){ numerator=num;denominator=deno;} CFraction operator+(const CFraction&); Friend CFraction operator*(const CFrcation&,const CFraction&); void disp();}; 设计如下函数;

(1) 运算符+重载函数,实现分数相加; (2) 运算符*重载函数,实现分数相乘;

(3) disp函数,以“numerator/denominator”形式显示CFraction数据

成员。

7.设计如下类: (1)CShape抽象类。CShape有2个纯虚函数virtual double area()和virtual double volumne(),没有数据成员。

(2)CShape公有派生矩形类CRectangle。CRectangle新增数据成员double width和length。给出了基类虚函数的实现,分别返回矩形面积和体积。并设计CRectangle类的构造和复制构造函数。

(3)设计主函数,在主函数中声明基类的指针,指向派生类的对象,调用虚函数显示派生类对象的面积和体积。

8.编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:a)抽象出一个基类base;b)在其中说明一个虚函数用来求面积;c)利用派生类定义“三角形、正方形、圆形”;d)编写主函数并测试。

9.编写一个雇员和雇主数据输入和显示的程序。雇员数据有编号(no)、姓名(name)

和工资(salary),雇主数据有编号(no)、姓名(name)和职位(post)。要求将编号、姓名输入和显示设计成一个类person,并作为雇员数据类employee和雇主数据类employer的基类,并编写主程序进行执行,体现运行多态性,并给出执行结果。

10.编写C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?

11.编写一个求字符串“we study new and delete”长度的程序,要求定义类strtype,用new和delete这两个关键字分配和撤销字符串空间:创建字符串空间时,要有打印信息“Creating string”;撤销字符串空间时,要有打印信息“Deleting string”;定义函数show用于显示字符串的长度,显示执行结果。

12.要求计算正方体、球和圆柱3个几何体的表面积和体积。可以抽象出一个公共的基类?把它作为抽象类,在该类内定义求表面积和体积的纯虚函数。在抽象类中可以定义一个数据成员length,它可作为球的半径、正方体的边长或圆柱体底面积的半径。请用C++语言定义上述类。

读程序写结果

(a) 程序运行后的输出结果是______。 #include using namespace std; class complex {

int real; int imag; public:

complex(int r=0,int i=0);real(r),imag(i){} void show()

cout<real+=real; imag+=c.imag; return c; }

complex&operator-=(complex &c) {

real-=c.real; imag-=c.imag; return c; }

friend complex&operator--(complex &);

friend complex&operator++(complex &); };

complex&operator--(complex &c) {

c.real--; c.imag--; return c; }

complex&operator++(complex &c) {

c.real++; c.imag++; return c; }

void main() {

int i=10,j=3,m=2,n=-6; complex test 1(i,j); test1.show(); test1--;

complex test2(m,n); test2.show(); test2++;

test1+=test2; test1.show(); test2-=test1; test2.show(); }

(b)程序运行后的输出结果是______。 #include #include

Using namespace std; Class subtest {

String name;

Static int objectCount; Public:

Subtest(const string&id=””):name(id) {

++objectCount;

Print(“subtest()”); }

~subtest()

{

--objectCount;

Print(“~subtest()”); }

Subtest(const subtest&h):name(h.name) {

Name+=”copy”; ++objectCount;

Print(“subtest(const subtest&)”); }

Void print(const string&msg=””)const{ If(msg.size()!=0) Cout<Cout<<’\’<Int subtest::objectCount=0; Subtest f(subtest x){

x.print(“x argument inside f()”); cout<<”Returning from f()”<Int main(){

Subtest h(“h”);

Cout<<”English f()”<H2.print(“h2 after call to f()”); }

(c)程序运行后的输出结果是______ #include Using namespace std; Class A {

Public:

Virtual void f(){cout<<”A::f()executing\\n”;} };

Void main() { A a; B b; A*p=&a; p->f(); p=&b;

p->f(); }

(d)写出执行下面程序的输出结果______ Class A{public:A(){cout<<”A”;}}; Class B{public:B(){cout<<”B”;}}; Class C:public A { B b;

Public:C(){cout<<”C”;} };

Int main(){ C obj:return 0;}

(e)有如下程序

#include Using namespace std; Class A{ Public:

Virtual void func1(){cout<<”A1”;} Void func2(){cout<<”A2”;} };

Class B:public A{ Public:

Void func1(){cout<<”B1”;} Void func2(){cout<<”B2”;} };

Int main(){ A*p=new B; p->func1(); p->func2(); return 0; }

运行程序,屏幕上将显示输出______。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top