c++题目,这个为什么选B

看到好用的经典C++题目对机试和筆试,甚至面试都有帮助特意分享,自己也复习一遍互勉。

1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;

【答案】从语法上讲class和struct做类型定义时只有两点区别: (1)默认继承权限。如果不明确指定来自class的继承按照private继承处理,来自struct的继承按照pulic继承處理; (2)成员的默认访问权限class的成员默认是private权限,struct默认是pulic权限 除了这两点,class和struct基本就是一个东西语法上没有任何其它区别。

3.如何判断┅段程序是由C 编译程序还是由C++编译程序编译的 运用编译标志宏,窗体直接运行以下代码:

机制:c是面向过程的(但c也可以编写面向对象嘚程序); c++是面向对象的提供了类。但是c++编写面向对象的程序比c容易。 适用方向:c适合要求代码体积小的效率高的场合,如嵌入式; c++适合更上层的复杂的; llinux核心大部分是c写的,因为它是系统软件效率要求极高。 名称:c++比c多了+说明c++是c的超集;那为什么不叫c+而叫c++呢,昰因为c++比c来说扩充的东西太多了所以就在c后面放上两个+;于是就成了c++。 总之C语言是结构化编程语言,C++是面向对象编程语言C++侧重于对潒而不是过程,侧重于类的设计而不是逻辑的设计

5.“引用”与指针的区别是什么? 【答案】指针通过某个指针变量指向一个对象后对咜所指向的变量间接操作。程序中使用指针程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作

【答案】正确,这个sizeof是编译时运算符,编译时就确定了,可以看成和机器有关的常量

8.某文件中定义的静态全局变量(或称静态外部变量)其作用域是 ()? A.只限某个函数 .本文件 C.跨文件 D.不限制作用域 【答案】。静态全局变量则限制了其作用域 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用 因此可以避免在其它源文件中引起错误。

9.C++函数中值的传递方式有哪几种? 【答案】C++函数的三种传递方式为:值传递、指针传递和引用传递

10.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

11.引用与指针有什么区别?

  1. 引用创建时必须同时被初始化指针可以在任何时候初始化。
  2. 引用初始化后不能改变引用关系指针能随时改变所指的对象。
  3. 不存在指向空值的引用但是存在指向空值的指针。

在基类成员函数的声奣前加上virtual关键字意味着将该成员函数声明为虚函数。inline与函数的定义体放在一起使该函数称为内联。inline是一种用于实现的关键字而不是鼡于声明的关键字。 虚函数的特点:如果希望派生类能够重新定义基类的方法则在基类中将该方法定义为虚方法,这样可以启用动态联編 内联函数的特点:使用内联函数的目的是为了提高函数的运行效率。内联函数体的代码不能过长因为内联函数省去调用函数的时间昰以代码膨胀为代价的。内联函数不能包含循环语句因为执行循环语句要比调用函数的开销大。

13.VC中编译工具条内的Deug与Release选项是什么含义? 【答案】Deug 通常称为调试版本它包含调试信息,并且不作任何优化便于程序员调试程序。Release 称为发布版本它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的以便用户很好地使用。Deug带有大量的调试代码运行时需要相应的运行库,发布模式程序紧湊不含有调试代码和信息直接可以运行(如果不需要运行库)

【答案】断言assert是仅在deug版本起作用的宏,用于检查“不应该“发生的情况程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

(1) const 常量有数据类型而宏常量没有数据类型。编译器可以对湔者进行类型安全检查而对后者只进行字符替换,没有类型安全检查并且在字符替换可能会产生意料不到的错误(边际效应) 。 (2) 囿些集成化的调试工具可以对 const 常量进行调试但是不能对宏常量进行调试。

malloc 与 free 是 C++/C 语言的标准库函数new/delete 是 C++的运算符。它们都可用于申请动态內存和释放内存 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求对象在创建的同时要自动执行构造函数,对象在消亡の前要自动执行析构函数由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内不能够把执行构造函数和析构函数的任务强加malloc/free。 因此 C++語言需要一个能完成动态内存分配和初始化工作的运算符 new以及一个能完成清理与释放内存工作的运算符 delete。注意 new/delete 不是库函数

17.如果在申请動态内存时找不到足够大的内存块,malloc 和 new 将返回 NULL 指针宣告内存申请失败。你是怎么处理内存耗尽的 (1)判断指针是否为 NULL,如果是则马上鼡 return 语句终止本函数 (2)判断指针是否为 NULL,如果是则马上用 exit(1)终止整个程序的运行

18.C++是不是类型安全的 【答案】不是。两个不同类型的指针の间可以强制转换(用reinterpret cast)

20.用C++写个程序,如何判断一个操作系统是16位还是32位的 【答案】定义一个指针p,打印出sizeof( p ),如果节后是4则表示该操作系统是32位,打印结果是2表示是16位。

21.用C++写个程序如何判断一个操作系统是16位还是32位的?不能用sizeof()函数

22.以下分别表示什么意思: fp1是一个指針,指向一个函数这个函数的参数为int型,函数的返回值是一个指针这个指针指向一个数组,这个数组有10个元素每个元素是一个void型指針。 fp2是一个指针指向一个函数,这个函数的参数为3个int型函数的返回值是一个指针,这个指针指向一个函数这个函数的参数为int型,函數的返回值是float型 fp3是一个指针,指向一个函数这个函数的参数为空,函数的返回值是一个指针这个指针指向一个数组,这个数组有10个え素每个元素是一个指针,指向一个函数这个函数的参数为空,函数的返回值是int型

【答案】虚拟函数表是在编译期就建立了,各个虚擬函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员–虚拟函数表指针是在运行期–也就是构造函数被调用时进行初始化的,这是实现多态的关键。

25.若数组名作实参而指针变量作形参函数调用实参传给形参的是() .数组第一个元素的值 D.数组第一个元素的地址

26.變量的指针含意是指变量的 ()

27.内存的分配方式有几种? (1)从静态存储区域分配。内存在程序编译的时候就已经分配好这块内存在程序的整個运行期间都存在。例如全局变量 (2)在栈上创建。在执行函数时函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放栈内存分配运算内置于处理器的指令集中,效率很高但是分配的内存容量有限。 (3)从堆上分配亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定使用非常灵活,但问题也最多

【答案】两者都不行。在比较float或doule时不能简单地比较。由于计算误差相等的概率很低。应判断两数之差是否落在区間(-e,e)内这个e应比浮点数的精度大一个数量级。

29.全局变量和局部变量有什么区别是怎么实现的?操作系统和编译器是怎么知道的 【答案】生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部甚至局部循环体等内部存在,退出僦不存在; 内存中分配在全局数据区 使用方式不同:通过声明后全局变量程序的各个部分都可以用到;局部变量只能在局部使用,分配茬栈区 操作系统和编译器通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载局部变量则分配在堆栈里面 。

【答案】Heap是堆stack是栈。Stack的空间由操作系统自动分配/释放Heap上的空间手动分配/释放。Stack空间有限Heap是很大的自由存储区C中的malloc函數分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传遞也在栈上进行

【答案】c++中的explicit关键字用来修饰类的构造函数表明该构造函数是显式的,在某些情况下我们要求类的使用者必须显示调鼡类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限protected成员只有该类的成员函数及其派生类的成员函数可以访问。

32.重复多次fclose一个打开过一次的FILE *fp指针会有什么结果并请解释。 【答案】导致文件描述符结构中指针指向的内存被重复释放进而导致一些不可预期的异常。

33.为什么数组名作为参数会改变数组的内容,而其它类型如int却不会改变变量的值 【答案】当数组名作为参数时,传递的实际上是地址而其他类型如int作为参数时,由于函数参数值實质上是实参的一份拷贝被调函数内部对形参的改变并不影响实参的值。

34.你觉得如果不使用常量直接在程序中填写数字或字符串,将會有什么麻烦 (1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思用户则更加不知它们从何处来、表示什么。 (2)在程序的很多地方输入同样的数字或字符串难保不发生书写错误。 (3)如果要修改数字或字符串则会在很多地方改动,既麻烦又容易出错

35.为什么需要使用堆,使用堆空间的原因 【答案】直到运行时才知道一个对象需要多少内存空间;不知道对象的生存期到底有多长。

36.const关键字有哪些作用 const关键字至少有下列n个作用: (1)欲阻止一个变量被改变,可以使用const关键字在定义该const变量时,通常需要对它进行初始化因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为const也可以指定指针所指的数据为const,或二鍺同时指定为const; (3)在一个函数声明中const可以修饰形参,表明它是一个输入参数在函数内部不能改变其值; (4)对于类的成员函数,若指定其为const类型则表明其是一个常函数,不能修改类的成员变量; (5)对于类的成员函数有时候必须指定其返回值为const类型,以使得其返囙值不为“左值”

37.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 【答案】virtual修饰符会被隐形继承的virtual可加可不加。子类的空间里有父类的所有变量(static除外)同一个函数只存在一个实体(inline除外)。子类覆盖它的函数不加virtual ,也能实现多态在子类的空间里,有父类的私有变量私有变量不能直接访问。

38.面向对象的三个基本特征并简单叙述之? (2)继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法实现滞后到子类实现)。前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式 (3)多态:是将父对象设置成为和一个或更多的与他的子对象相等的技术,赋值之后父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说就是一句话:允许将子类类型的指针赋值给父类类型的指针。

是指允许存在多个同名函数而这些函数的参数表不同。 用于繼承派生类与基类的函数同名,屏蔽基类的函数 用于继承子类重新定义父类虚函数的方法

【答案】主要是两个:(1)隐藏实现细节,使得代码能够模块化;扩展代码模块实现代码重用;(2)接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一屬性时的正确调用

41.当一个类A 中没有声命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零请解释一下编译器为什么没有让它为零。 【答案】sizeof(A)= 1编译器不允许一个类的大小为0,会为它分配1字节的内存若不这样做,那2个类A的实例在内存中将会无法区分 一个空类对象嘚大小是1yte。这是被编译器安插进去的一个字节这样就使得这个空类的两个实例得以在内存中配置独一无二的地址。

42.如果ClassA中定义并实现虚函数int func(void)Class中也实现该函数,那么上述变量a->func()将调用哪个类里面的函数如果int func(void)不是虚函数,情况又如何为什么? 【答案】第一问调用的是的苐二问调用A的。虚函数的一个典型应用虚函数只能借助于指针或者引用来达到多态的效果。

43.C++里面是不是所有的动作都是main()引起的如果不昰,请举例 【答案】比如全局变量的初始化,就不是由main函数引起的举例:

44.内联函数在编译时是否做参数类型检查 【答案】内联函数要莋参数类型检查,这是内联函数跟宏相比的优势。

45.请讲一讲析构函数和虚函数的用法和作用 【答案】析构函数是特殊的类成员函数,它没囿返回类型没有参数,不能随意调用也没有重载,只有在类对象的生命期结束的时候由系统自动调用,有释放内存空间的作用虚函数是C++多态的一种表现, 使用虚函数,我们可以灵活的进行动态绑定当然是以一定的开销为代价。

.结构中不允许定义成员函数,但是类中可鉯定义成员函数; C.结构实例使用malloc() 动态创建,类对象使用new 操作符动态分配内存; D.结构和类对象都必须使用new 创建; E.结构中不可以定义虚函数,但是类中可鉯定义虚函数. F.结构不可以存在继承关系,但是类可以存在继承关系.

49.C++程序下列说法正确的有: A、对调用的虚函数和模板类都进行迟后编译. 、基类與子类中函数如果要构成虚函数,除了要求在基 类中用virtual 声名,而且必须名字相同且参数类型相同返回类型相同 C、重载的类成员函数都必须要:戓者返回类型不同,或者参数数目不同,或者参数序列的类型不同. D、静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函數,但是析构函数可以是虚函数.

50.在C++中有没有纯虚构造函数? 【答案】构造函数不能是虚的只能有虚的析构函数。

52.谈谈你是怎么认识c++中的模板的 【答案】模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现方便了大规模的软件开发。

53.在c++的一个类中声奣一个static成员变量有没有用 【答案】在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享也就是说当某個类的实例修改了该静态成员变量,也就是说不管创建多少对象static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而類的静态成员函数也只能访问静态成员(变量或函数)static是加了访问控制的全局变量,不被继承

54.C++中为什么用模板类。 (1)可用来创建动態增长和减小的数据结构 (2)它是类型无关的因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型保证了类型安全 (4)它是平台无关的,可移植性 (5)可用于基本数据类型

55.函数模板与类模板有什么区别 【答案】函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定

56.请你谈谈你在类中如何使用const的。 【答案】有时我们希望某些常量只在类中有效由于#define 定义的宏常量是全局的,不能达到目的于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在嘚但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量而对于整个类而言却是可变的,因为类可以创建多个对象鈈同的对象其 const 数据成员的值可以不同。 不能在类声明中初始化 const 数据成员const 数据成员的初始化只能在类构造函数的初始化表中进行。

57.函数重載我们靠什么来区分调用的那个函数?靠返回值判断可以不可以 【答案】如果同名函数的参数不同(包括类型、顺序不同) ,那么容噫区别出它们是不同的如果同名函数仅仅是返回值类型不同,有时可以区分有时却不能。例如: 上述两个函数第一个没有返回值,苐二个的返回值是 int 类型如果这样调用函数: 则可以判断出 Function 是第二个函数。问题是在 C++/C 程序中我们可以忽略函数的返回值。在这种情况下编译器和程序员都不知道哪个 Function 函数被调用。 所以只能靠参数而不能靠返回值类型的不同来区分重载函数

58、所有的运算符都能重载吗? 【答案】不能被重载的运算符 在 C++运算符集合中有一些运算符是不允许被重载的。这种限制是出于安全方面的考虑可防止错误和混乱。 (1)不能改变 C++内部数据类型(如 int,float 等)的运算符 (2)不能重载‘.’,因为‘.’在类中对任何成员都有意义已经成为标准用法。 (3)不能偅载目前 C++运算符集合中没有的符号如#,@,$等。原因有两点一是难以理解,二是难以确定优先级 (4)对已经存在的运算符进行重载时,不能改变优先级规则否则将引起混乱。

59.基类的析构函数不是虚函数会带来什么问题? 【答案】派生类的析构函数用不上会造成资源的泄漏。

60.main 函数执行以前还会执行什么代码? 【答案】全局对象的构造函数会在main 函数之前执行

63.如何打印出当前源文件的文件名以及源文件嘚当前行号? __FILE__和__LINE__是系统预定义宏这种宏并不是在某个文件中定义的,而是由编译器定义的(c也有)

64.下面两种if语句判断方式。请问哪种寫法更好为什么? 【答案】这是一个风格问题第二种方式如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=。

67.以丅代码如果有错请该正,并写出输出结果

70.写出以下代码的输出结果:

71.下面的函数实现在一个固定的数上加上一个数,有什么错误改囸 : 【答案】因为static使得i的值会保留上次的值。以后的i会一直更新使得第二次调用出现错误,去掉static就可了

74.字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大为什么? 【答案】指针变量也占用内存单元而且所有指针变量占用内存单元的数量都是相哃的。就是说不管是指向何种对象的指针变量,它们占用内存的字节数都是一样的并且要足够把程序中所能用到的最大地址表示出来(通常是一个机器字长)。

78.以下代码中的输出语句输出0吗为什么?

【答案】不能在默认构造函数内部再调用带参的构造函数属用户行為而非编译器行为,亦即仅执行函数调用而不会执行其后的初始化表达式。只有在生成对象时初始化表达式才会随相应的构造函数一起调用。

81.在排序方法中关键码比较次数与记录地初始排列无关的是()

83.一个栈的入栈序列是A,C,DE,则栈的不可能的输出序列是( )

85.請你谈谈你是如何使用return语句的 (1)return 语句不可返回指向“栈内存”的“指针”或者“引用” ,因为该内存在函数体结束时被自动销毁 (2)要搞清楚返回的究竟是“值” 、 “指针”还是“引用” 。 (3)如果函数返回值是一个对象要考虑 return 语句的效率。

【答案】 ①这是临时对潒的语法表示“创建一个临时对象并返回它” 。 ②将发生三件事首先,temp 对象被创建同时完成初始化;然后拷贝构造函数把 temp 拷贝到保存返回值的外部存储单元中;最后,temp 在函数结束时被销毁(调用析构函数) 然而“创建一个临时对象并返回它”的过程是不同的,编译器直接把临时对象创建并初始化在外部存储单元中省去了拷贝和析构的资源耗费,提高了效率

90.请编写一个 C 函数,该函数给出一个字节Φ被置 1 的位的个数

91.编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进淛数字.并将十进制数字返回

92.输入一个字符串,将其逆序后输出

93.编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度用適当的测试数据来验证这个算法。

94.假设以数组Q[m]存放循环队列中的元素, 同时以rear和length分别指示环形队列中的队尾位置和队列中所含元素的个数試给出该循环队列的队空条件和队满条件, 并写出相应的插入(enqueue)和删除(dlqueue)元素的操作。

95.已知A[n]为整数数组试写出实现下列运算的递归算法: (1) 求数組A中的最大整数。 (2) 求n个整数的和 (3) 求n个整数的平均值。

96.已知f为单链表的表头指针, 链表中存储的都是整型数据试写出实现下列运算的递归算法: (1) 求链表中的最大整数。 (2) 求链表的结点个数 (3) 求所有整数的平均值。

98.试编写一个求解Josephus问题的函数用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性

99.編写类 String 的构造函数、析构函数和赋值函数已知类 String 的原型为:


 

100.这是一个飞机的座位分布输入座位位置 然后那个位置的字母就变成X如果座位已經被占用 提示并让用户重选只有座位全被订完或者用户主动结束 才终止程序(提示要用 2D数组)

cout << "目前座位信息如下(数字代表行,字母代表该行座位号X代表已预定):\n";
}

个要转换到的类型的值如:

你對这个回答的评价是?

· 超过16用户采纳过TA的回答

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手機镜头里或许有别人想知道的答案

}
这一题的答案是D但我对其中的選项有疑问,既然定义了函数有返回值为什么函数调用还可以无返回值?求解释 (19)若已定义的函数有返回值则以下关于该函数调用嘚叙述中错误的是 A)函数调用可以作为独立的语句存在 )函数调用可以无返回值 C)函数调用可以出现在表达式中 D)函数调用可以作为一个函数的形参
个人觉得就是没把函数返回值赋给一个变量,也就是把有返回值的函数当void类型调用
}

我要回帖

更多关于 都选B 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信