c++面试题中总结的知识点

上传人:xzh****18 文档编号:34515210 上传时间:2018-02-25 格式:DOCX 页数:5 大小:25.76KB
返回 下载 相关 举报
c++面试题中总结的知识点_第1页
第1页 / 共5页
c++面试题中总结的知识点_第2页
第2页 / 共5页
c++面试题中总结的知识点_第3页
第3页 / 共5页
c++面试题中总结的知识点_第4页
第4页 / 共5页
c++面试题中总结的知识点_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《c++面试题中总结的知识点》由会员分享,可在线阅读,更多相关《c++面试题中总结的知识点(5页珍藏版)》请在金锄头文库上搜索。

1、1使用 ODBC API 开发数据库应用程序的步骤是什么?连接数据源。分配语句句柄。准备并执行 SQL 语句。获取结果集。提交事务。断开数据源连接并释放环境句柄。关键字 static 的作用是什么?这个简单的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:1). 在函数体,一个被声明为静态的变量,该变量的内存只被分配一次,在这一函数被调用过程中维持其值不变。2). 在模块内(但在函数体外) ,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

2、那就是,这个函数被限制在声明它的模块的本地范围内使用。(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量。 关键字 const 是什么含义只要能说出 const 意味着 “只读”就可以了。const int a; ,a 是一个常整型数int const a; ,a 是一个常整型数const int *a; a 是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)int * const a; a 是一个指向整型数的常指针(

3、也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)int const * a const; 一个意味着 a 是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)1). 关键字 const 的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。 (当然,懂得用 const 的程序员很少会留下的垃圾让别人来清理的。 )2). 通过给优化器一些附加的信息,使用关键字 const 也许能产生更紧凑的代码。3). 合理地使用关键字

4、 const 可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少 bug 的出现。作用:(1)欲阻止一个变量被改变,可以使用 const 关键字。在定义该 const 变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为 const,也可以指定指针所指的数据为 const,或二者同时指定为 const;(3)在一个函数声明中,const 可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;(4)对于类的成员函数,若指定其为 const 类型,则表明其是一个常函数,不能修改类的成员变量;(5)对于

5、类的成员函数,有时候必须指定其返回值为 const 类型,以使得其返回值不为“左值”。例如:const classA operator*(const classAoperator*的返回结果必须是一个 const 对象。如果不是,这样的变态代码也不会编译出错:classA a, b, c;(a * b) = c; / 对 a*b 的结果赋值操作(a * b) = c 显然不符合编程者的初衷,也没有任何意义。关键字 volatile 有什么含意 并给出三个不同的例子。一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器

6、在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是 volatile 变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3). 多线程应用中被几个任务共享的变量2分别给出 BOOL,int,float ,指针变量 与“零值” 比较的 if 语句(假设变量名为 var)解答:BOOL 型变量:if(!var)int 型变量: if(var=0)float 型变量:const float EPSINON = 0.00001;if (x = EPSI

7、NON) & (x = EPSINON)指针变量: if(var=NULL)数组名1、数组名作为函数形参时,沦为普通指针。仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。void Func ( char str100 )sizeof( str ) = ? /答案 4 2、数组名指代一种数据结构,这种数据结构就是数组;例如:char str10;cout sizeof(str) endl;输出结果为 10,str 指代数据结构 char10。3、数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;char

8、str10;str+; /编译出错,提示 str 不是左值写一个“标准 ”宏 MIN,这个宏输入两个参数并返回较小的一个#define MIN(A,B) (A) = (B) ? (A) : (B)为什么标准头文件都有类似以下的结构? #ifndef _INCvxWorksh#define _INCvxWorksh#ifdef _cplusplus /防止被重复引用extern “C” #endif#ifdef _cplusplus#endif#endif /* _INCvxWorksh */作为一种面向对象的语言,C+支持函数重载,而过程式语言 C 则不支持。函数被 C+编译后在 symbol

9、 库中的名字与 C 语言的不同。例如,假设某个函数的原型为: void foo(int x, int y);该函数被 C 编译器编译后在 symbol 库中的名字为_foo,而 C+编译器则会产生像_foo_int_int 之类的名字。_foo_int_int 这样的名字包含了函数名和函数参数数量及类型信息,C+就是考这种机制来实现函数重载的。为了实现 C 和 C+的混合编程,C+提供了 C 连接交换指定符号 extern “C”来解决名字匹配问题,函数声明前加上 extern “C”后,则编译器就会按照 C 语言的方式将该函数编译为_foo,这样 C 语言中就可以调用 C+的函数了。编写类

10、String 的构造函数、析构函数和赋值函数,已知类 String 的原型为:class Stringpublic:3String(const char *str = NULL); / 普通构造函数String(const String / 拷贝构造函数 String(void); / 析构函数String / 赋值函数private:char *m_data; / 用于保存字符串;解答:/普通构造函数String:String(const char *str)if(str=NULL)m_data = new char1; / 得分点:对空字符串自动申请存放结束标志0 的空/加分点:对 m_d

11、ata 加 NULL 判断*m_data = 0;elseint length = strlen(str);m_data = new charlength+1; / 若能加 NULL 判断则更好strcpy(m_data, str);/ String 的析构函数String:String(void)delete m_data; / 或 delete m_data;/拷贝构造函数String:String(const String &other) / 得分点:输入参数为 const 型int length = strlen(other.m_data);m_data = new charlengt

12、h+1; /加分点:对 m_data 加 NULL 判断strcpy(m_data, other.m_data);/赋值函数String & String:operate =(const String &other) / 得分点:输入参数为 const 型if(this = &other) /得分点:检查自赋值return *this;delete m_data; /得分点:释放原有的内存资源int length = strlen( other.m_data );4m_data = new charlength+1; /加分点:对 m_data 加 NULL 判断strcpy( m_data,

13、 other.m_data );return *this; /得分点:返回本对象的引用区别引用与指针有什么区别?答 1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。全局变量和局部变量在内存中是否有区别? 答 、全局变量储存在静态数据区,局部变量在堆栈中。类成员函数的重载、覆盖和隐藏区别?a. 成员函数被重载的特征:(1)相同的范围(在同一个类中) ;(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基

14、类) ;(2)函数名字相同;(3)参数相同;(4)基类函数必须有 virtual 关键字。c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载混淆) 。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)Struct 与 class 的区别答案:struct 的成员默认是公有的,而类的成员默认是私有的。struct 和 class 在其他方面是功能相当的。从感情上讲,大多

15、数的开发者感到类和结构有很大的差别。感觉上结构仅仅象一堆缺乏封装和功能的开放的内存位,而类就象活的并且可靠的社会成员,它有智能服务,有牢固的封装屏障和一个良好定义的接口。既然大多数人都这么认为,那么只有在你的类有很少的方法并且有公有数据(这种事情在良好设计的系统中是存在的!)时,你也许应该使用 struct 关键字,否则,你应该使用 class 关键字。枚举与#define 的区别1) ,#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。2) ,一般在编译器里,可以调试枚举常量,但是不能调试宏常量。3) ,枚举可以一次定义大量相关的常量,而#define 宏一

16、次只能定义一个。exit 与 return 的区别exit()函数在退出程序后会将控制权交回给操作系统当通过 return 语句从一般函数返回时控制权将交给调用该函数的函数在 main()函数中使用 return 语句返回后,控制权将交给操作系统,因此在主函数中 return 语句的功能与 exit()函数功能相同。指针常量const char*, char const*, char*const 的区别问题几乎是 C+面试中每次都会有的题目。把一个声明从右向左读。char * const cp; ( * 读成 pointer to )cp is a const pointer to charconst char * p;p is a pointer to const char;char const * p;5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号