c++_常考面试题.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c_常考面试题

1、引用与指针的区别是什么? 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是上面提到的对函数传ref和pointer的区别。 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。 char*strcpy(char*strDest,?constchar*strSrc) { assert((strDest!=NULL)??(strSrc?!=NULL));?//?2分 char*?address?=?strDest;   //?2分 while( (*strDest++=*strSrc++)?!=\0?)       //?2分 NULL;? return?address ;    //?2分 } int?strlen(?constchar*str )?//?输入参数const { assert( str?!=?NULL );?//?断言字符串地址非0 int?len = 0; while( (*str++)?!=\0?)? {? len++;? }? return?len; } 已知String类定义如下: #includefile.h 与#include file.h的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 在C++程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数 extern C是连接申明(linkage declaration),被extern C修饰的变量和函数是按照C语言方式编译和连接的,来看看C++中对类似。 (1)在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理: externC {   #includecExample.h } 而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern C声明,在.c文件中包含了externC时会出现编译语法错误。 如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern C { }。 (2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern C,但是在C语言中不能直接引用声明了extern C的该头文件,应该仅将C文件中将C++中定义的externC函数声明为extern类型。 C引用C++函数例子工程中包含的三个文件的源代码如下: //C++头文件cppExample.h #ifndef CPP_EXAMPLE_H #define?CPP_EXAMPLE_H externCint?add(?int?x,?int?y ); #endif //C++实现文件 cppExample.cpp #includecppExample.h int?add(?int?x,?int?y ) {   return?x?+?y; } /*?C实现文件 cFile.c /* 这样会编译出错:#i nclude cExample.h?*/ externint?add(?int?x,?int?y ); int?main(?int?argc,?char*?argv[] ) {   add(?2,?3?);?   return0; } 16.?关联、聚合(Aggregation)以及组合(Composition)的区别? 涉及到UML中的一些概念: 关联是表示两个类的一般性联系,比如“学生”和“老师”就是一种关联关系; 聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系: 从实现的角度讲,聚合可以表示为: class A {...}? class B { A* a; .....} 组合表示contain

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档