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. opencl(2)平台、设备、上下文的获取与信息获取

    1:平台 1)获取平台id cl_int clGetPlatformIDs( cl_uint num_entries,      //想要获取的平台数 cl_platform_id * flatfor ...

  2. Vue入门 — Vue + vuetifyjs应用实践

    分享一个以前学vue时自己练手的一个小项目,项目使用vue-cli3创建,UI库用的是vuetifyjs,vuetifyjs官网:https://vuetifyjs.com/ 数据来源是网上随便找的一 ...

  3. jstl中<c:if>标签属性用法

    今天用jstl+el从session域中获取属性,遇到了问题 org.apache.jasper.JasperException: <h3>Validation error message ...

  4. 【 哈希和哈希表】Three Friends【进制哈希】

    Three Friends 传送门:链接 (UPC)或  链接(大视野) 题目描述 Three friends like to play the following game. The first f ...

  5. SQL2008R2安装碰到问题的解决方法(iso文件用对应的工具)

    SQL2008R2安装碰到问题的解决方法     安装谁不会啊,这么简单,是啊,可是匹配包时就不是那么顺利啊.就像以前的Ruby还专挑匹配版本的包一样,不像现在的Py自动为我们找,这是Mar 7贴在Q ...

  6. 大数据之Hudi + Kylin的准实时数仓实现

    问题导读:1.数据库.数据仓库如何理解?2.数据湖有什么用途?解决什么问题?3.数据仓库的加载链路如何实现?4.Hudi新一代数据湖项目有什么优势? 在近期的 Apache Kylin × Apach ...

  7. android屏幕适配的全攻略--支持不同的屏幕尺寸适配平板和手机

    一. 核心概念与单位详解 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕分辨率越大,手机越清晰 dpi就是dot per inch dot意思是点,就是每英寸上面的像素点数 android原始 ...

  8. npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs'

    npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs' 起因:原本安装node在C盘soft文件夹下,按node ...

  9. 如何下载 Ubuntu 镜像文件?

    Ubuntu,是一款基于 Debian Linux 的以桌面应用为主的操作系统,内容涵盖文字处理.电子邮件.软件开发工具和 Web 服务等,可供用户免费下载.使用和分享. 但是对于国内的用户来说如果直 ...

  10. SpringMVC和Spring

    SpringMVC和Spring汇总 转载:https://www.cnblogs.com/doudouxiaoye/p/5693399.html 1. 为什么使用Spring ? 1). 方便解耦, ...