




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+ 程序员面试经典问题1、静态成员必须要在类外初始化,无法在构造函数内初始化。新标准的C+也允许在生命静态数据成员的是后直接加等于号进行初始化,但是大部分编译器不支持。所以最保险的办法就是在类定义的外面再写:int Foo:a = 0;函数则很普通成员函数的声明以及实现没区别,唯一要注意的是,静态函数是没有this指针的,因此不能访问任何非静态的其他成员函数或成员变量,如果要访问需要传递this指针进去1、 重载函数是函数的一种特殊情况,为方便使用,C+允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。2、 拷贝构造函数的参数为什么是类的引用,而不是类的对象,传递对象的话会造成极度的负担,一个对象的大小难以确定,可能会非常大,如果像普通那样进行浅拷贝的话,可能会带来资源不足的问题,严重拖累程序的效率。按引用传递则传递了地址(像指针),同时在语法上却像传值一样方便。这样就不会有很大负担了3、 常对象必须初始化,并且初始化后不能修改数据成员。常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。1.2.1优点:能够提高效率,表达简单、清晰。1.2.2缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。2.1友元函数的参数:因为友元函数没有this指针,则参数要有三种情况:2.1.1要访问非static成员时,需要对象做参数;2.1.2要访问static成员或全局变量时,则不需要对象做参数;2.1.3如果做参数的对象是全局对象,则不需要对象做参数;2.2友元函数的位置因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。2.3友元函数的调用可以直接调用友元函数,不需要通过对象或指针2.4友元函数的分类:根据这个函数的来源不同,可以分为三种方法:2.4.1普通函数友元函数2.4.1.1目的:使普通函数能够访问类的友元4、 内联函数就是编译的时候直接把函数那段代码填到调用函数的地方,因为不用像普通函数调用那样去寻址,所以速度更快5、 构造函数的特点:1.构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;5.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c+)6.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。12.它可以重载;7、static变量是放在栈中,就是在程序的运行期都是存在的,函数中的STATIC变量是在编译时由编译器改名了的,所以在函数中是可以访问的,函数外是不可以访问的8、1、C语言函数的定义不能嵌套,函数的调用可以嵌套。2、C语言中函数的定义都是相互平行、相互独立的,也就是说在函数定义时,函数体内不能包含另一个函数的定义,即函数不能嵌套定义,但可以 嵌套调用。嵌套函数,就是指在某些情况下,您可能需要将某函数作为另一函数的参数使用,这一函数就是嵌套函数。一个为大家所熟知的例子就是 qsort函数会将一个比较器cmp作为参数.在一个程序中, 主函数调用了sum函数,而在sum函数中又调用了mul函数。在一个函数被调用的过程中又调用另一个函数,这就是函数的 嵌套调用。如果是函数本身嵌套调用函数本身,那就是函数递归调用了。虚基类一般是在多继承的时候用。例如A水上交通工具 B陆地交通工具 C水陆两用坦克A和B、C都有start方法,那么C的start方法就会有二义性,究竟继承自谁呢?这个时候就要用虚拟继承了,这个时候AB是C的虚基类。不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。继承的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。1,构造函数和析构函数不能被继承。构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。所以,在整个层次中的所有的构造函数和析构函数都必须被调用而不能被继承。2,子类的构造函数会显示的调用父类的构造函数或隐式的调用父类的默认的构造函数进行父类部分的初始化。3,析构函数也一样。它们都是每个类都有的东西,如果能被继承,那就没有办法初始化了。运算符重载时要遵循以下规则:(1)除了类属关系运算符.、成员指针运算符.*、作用域运算符:、sizeof运算符和三目运算符?:以外,C+中的所有运算符都可以重载。(2)重载运算符限制在C+语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。(3)运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。(4)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。(5)运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。(6)运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。c+支持函数重载,c不支持函数重载,函数被c+编译后在库中的名字与c语言不同。c+提供了c连接交换指定符号extern”c”解决名字匹配问题。在c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等三个用处。在c+程序中,它还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员。const 的用途:1、 可以定义const常量2、 const可以修饰函数的参数和返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。sizeof 和 str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《GB-T 31326-2014植物饮料》
- 监控售后质保协议4篇
- 中介租赁车位合同范本
- 尾矿合作转让合同范本
- 马路沥青施工合同范本
- 物业清洗保洁工程项目合同6篇
- 贷款中介电子合同范本
- 值班主管自学题目及答案
- (新)2025年急救相关知识考试题库附完整答案【易错题】
- 广商入学考试试题及答案
- 《油气管道无人机智能巡检系统技术管理规范》
- 巡察工作基本流程课件
- 游艇火灾安全知识培训课件
- (2025年标准)学生玩耍纠纷协议书
- GB 46030-2025建筑用安全玻璃安全技术要求
- 2025年新《中华人民共和国安全生产法》知识竞赛测试题库含答案
- (2025年标准)茶楼入股合同协议书
- 养老院员工奖惩管理制度范本
- 2025-2026秋季学年第一学期学生国旗下演讲稿(20周):第五周 76载荣光里我们茁壮成长-喜迎国庆
- 2025全球人形机器人企业能力画像整机能力评估模型V2.0
- 统编版(2024)七年级上册语文教学计划及进度表
评论
0/150
提交评论