1、谈谈啥叫对象成员以及对象成员的构造函数调用调用方式。

在类中定义的数据成员一般都是基本的数据类型。但是类中的成员也可以是对象,叫做对象成员。

C++中对对象的初始化时非常重要的操作,当创建一个对象的适合,C++编译器必须确保调用了所有子对象的构造函数。如果所有的子对象有默认构造函数,编译器可以自动调用他们。但是如果子对象没有默认的构造函数,或者想指定调用某个构造函数怎么办?

那么是福哦可以在类的构造函数直接调用子类的属性完成初始化呢,但是如果子类的成员属性时私有的,我们是没有办法访问并完成初始化。

解决方法,对于子类调用构造函数,C++为此提供了专门的语法,即构造函数初始化列表,就当调用构造函数时,首先按各对象在类定义中的顺序(和参数泪飙的顺序无关)依次调用它们的构造函数,对这些对象初始化,最后再调用本身的函数体。也就是说,先调用对象成员的构造函数,再调用本身的构造函数,析构函数和构造函数调用顺序相反,先构造,后析构。

2、谈谈对explicit的理解

C++提供了关键字explicit,禁止通过构造函数进行的隐式转换,声明explicit的构造函数不能在饮食隐式转换中使用。

3、谈谈C中malloc free 与C++中的new delete有啥区别,或则C++在堆区申请对象时为啥推荐使用new delete

C++中的malloc free的问题:

1、程序员必须确定对象的长度。

2、malloc 返回一个void指针,C++不允许将void赋值给其他任何指针,必须强转。

3、malloc 可能申请内存失败,所以必须判断返回值来确保内存分配成功。

4、用户在使用对象之前必须记住对他初始化,构造函数不能显示调用初始化(构造函数是由编译器调用),用户有可能忘记调用初始化。

总结:C的动态内存分配函数太复杂,容易令人混淆,是不可接受的,C++中我们推荐使用运算符new 和 delete

new 操作符 能确定在调用构造函数初始化之前内存分配时成功的,所有不用显示确定调用是否成功。

delete表达式先调用析构函数,然后释放内存。

4、谈谈你对static静态成员变量的理解。

在一个类中,若将一个对象变量声明为tatic,这种成员成为静态成员变量。与一般的数据成员不同,无论建立了多少个变量,都只有一个静态数据的拷贝,静态成员变量属于某个类,所有对象共享。

静态变量,时在编译阶段就分配空间,对象还没有创建时,就已经分配空间.

注意:1、静态成员 变量必须在类中声明,在类外定义。2、静态数据成员不属于某个对象,在得对象分配空间中不包括偶静态成员所占空间。3、静态数据成员可以通过类名或者对象名来引用。

5、谈谈你对static静态成员函数的理解

在类定义中,前面有static说明的成员函数成为静态恒源函数,静态成员函数使用方式和静态静态变量一样,同样在对象没有创建前,即可通过类名调用。静态成员函数主要为了访问静态变量,但是,不能访问普通成员变量。

静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,完全对静态数据成员的封装/

1\静态成员函数只能访问静态变量,不能访问普通成员变量,2、静态成员函数的使用和静态成员变量一样。3、静态成员函数也有访问权限。4、普通成员函数可访问静态成员变量、也可以访问非静态成员变量。

6、谈谈你对this的理解。

成员函数通过this指针即可知道操作的是那个对象的数据,This指针是一种隐含指针,,它隐含于每个类的非静态成员函数中,This指针无需定义,直接使用即可。

注意:静态成员函数内部没有this指针,静态成员函数不能操作非静态成员变量。

7、谈谈你对友元的理解

类的主要特点之一是数据因此,即类的室友成员无法在类的外部(作用域之外)访问,但是,有适合需要在类的外部访问类的私有成员,怎么办?解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员。

1、friend关键字只出现在声明处。2、其他类、类成员函数、全局函数都可声明为友元。3、友元函数不是类的成员,不带this指针。4、友元函数可访问对象任意成员属性,包括私有属性。

友元注意事项:

1、友元关系不能被继承。2、友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。

3、友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友。

8、谈谈你对继承的理解

C++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。

9、谈谈继承中的钩爪与析构的顺序

1、子类对象在创建时会首先调用父类的构造函数。2、父类构造函数执行完毕后,才会调用子类的构造函数。

3、当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数,析构函数调用顺序和构造函数相反。

10、继承中同名成员的处理方法

1、当子类成员和父类成员同名时,子类依然从父类继承同名成员。2、如果子类有成员和父类同名,子类访问其成员默认访问子类的成员(本作用域,就近原则)3、在子类通过作用域::进行同名成员区分(在派生类中使用基类的同名成员,显示使用类名限定符)。

11、C++的动态捆绑机制是怎样的

首先,我们看看编译器如何处理虚函数,当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。在多态调用的时候,根据vptr指针,找到虚函数表来实现动态绑定。

自描述C++部分面试题集的更多相关文章

  1. 转:Java面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101

    Java面试题集(51-70) Java程序员面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101 摘要:这一部分主要 ...

  2. 转:Java面试题集(1-50)

    Java程序员面试题集(1-50) http://blog.csdn.net/jackfrued/article/details/17403101 一.Java基础部分 1.面向对象的特征有哪些方面? ...

  3. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  4. Java面试题集(51-70)

    Java程序员面试题集(51-70) 51.类ExampleA 继承Exception,类ExampleB 继承ExampleA. 有如下代码片断: try{ thrownew ExampleB(“b ...

  5. iOS面试题集

    现在寒假时间在家里面无法敲代码了,但是自己总要找些事情来做,回头想想马上就要开始就业了,所以不免要参加面试,于是便开始了面试题集的浏览和探索,今天下午我看了一部分的面试题感觉还是挺实用的,所以以后还是 ...

  6. Java程序员面试题集(136-150)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17740651 Java程序员面试题集(136-150) 摘要:这一部分主要是数据结构和算法相关的面 ...

  7. Java程序员面试题集(71-85)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17566627 Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言) ...

  8. Java程序员面试题集(51-70)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...

  9. Java程序员面试题集(1-50)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17339393 下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和 ...

随机推荐

  1. tensorflow2.0学习笔记第一章第二节

    1.2常用函数 本节目标:掌握在建立和操作神经网络过程中常用的函数 # 常用函数 import tensorflow as tf import numpy as np # 强制Tensor的数据类型转 ...

  2. Vue好书推荐

    1.Vue.js实战 从基础知识到ui组件封装和剖析,层层推进,最后两个案例实战.适合零基础入门,学完可就业.(推荐看这本) 交流地址(pdf原件):链接(点击跳转):提取码:7IsG 2.vue.j ...

  3. 学习第一个python程序

    打印9*9惩罚表 for i in range(1,10): for j in range(1,i+1): print(str(j)+"*"+str(i)+"=" ...

  4. Eureka加了secsecurity后注册失败

    报错信息: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known ...

  5. postman查看打印

    原文:https://www.jianshu.com/p/f165a99245e3 1.再postman中每个请求的 Pre-request Script和Tests中都可以写代码2.也可将值打印到C ...

  6. Laya 吐槽日志.

    新换了一个公司,公司有两个产品都是用的laya, 一个as写的2D游戏, 一个ts写的3D游戏 as写小游戏,各种不舒服啊,  一堆 __JS这样的代码,   体验极差. laya IDE 按钮只能做 ...

  7. VS2017未安装MFC解决方法

    VS2017未安装MFC解决方法 https://blog.csdn.net/u010921682/article/details/89847395

  8. vulstack红队评估(四)

    一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: ubuntu: ubuntu:ubuntu   win7: douser:Dotest123   Win2008 DC: administr ...

  9. Spring系列.SpEL表达式

    Spring表达式语言 SpEL语言是一种强大的表达式语言,支持在运行时查询和操作对象.SpEL表达式不一定要创建IOC容器后才能使用.用户完全可以单独调用SpEL的API来独立的使用时SpEL表达式 ...

  10. Jmeter系列(35)- 使用 ServerAgent 监控服务器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 做性能测试,监控服务器资源指标是 ...