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. ReentrantReadWriteLock(读写锁)全部源码注释

    package java.util.concurrent.locks; import java.util.concurrent.TimeUnit; import java.util.Collectio ...

  2. 如何安装vue脚手架?

    前提(已经安装好node,可以正常使用npm) 一.cmd输入 npm install vue-cli -g ---- 全局安装vue-cli工具 安装好过后,再输入指令 vue --version ...

  3. CMAKE工具学习

    最近在学习各大物联网平台的SDK包,发现其工程都使用了一种叫cmake的工具在管理代码.于是花了一天时间简单学习了解了cmake工具,其目的是让自己能读懂使用该工具管理的代码,并能简单使用该工具管理我 ...

  4. iOS-线程&&进程的深入理解

    进程基本概念 进程就是一个正在运行的一个应用程序; 每一个进度都是独立的,每一个进程均在专门且手保护的内存空间内; iOS是怎么管理自己的内存的,见博客:博客地址 在Linux系统中,想要新开启一个进 ...

  5. 源码分析(1)-HashMap(JDK1.8)

    UML类图 java.util.Map<K, V>接口,有4个实现类:HashMap.Hashtable.LinkedHashMap和TreeMap. 1.说明 (1)HashMap除允许 ...

  6. Spire.Cloud.SDK for Java 合并、拆分Excel单元格

    Spire.Cloud.SDK for Java 是Spire.Cloud云产品系列中,用于处理Word.Excel.PowerPoint以及PDF文档的JAR文件,可执行文档编辑.转换.保存等操作. ...

  7. 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!

    前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...

  8. ODEINT 求解常微分方程(2)

    import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # function tha ...

  9. 快捷符号输入小tip(option,alt键的妙用)

    我们知道特殊符号的输入可以通过上档键(shift)加数字来完成.如!@#$%... -> (shift + 1 2 3 4 5...) 但是少有人知道windows中的alt键,或是macos中 ...

  10. Android开发Fragment的使用学习

    基本概念 Fragment是Android3.0(API11)提出的概念,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6.所以在开发中要注意不要导错包 导 ...