码迷,mamicode.com
首页 > 编程语言 > 详细

C++多态面试题

时间:2016-07-06 18:47:47      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:c++多态面试题


面试题1:请谈谈你对多态的理解

多态的实现效果

当用父类对象指向子类对象的时候,函数在子类来回穿梭表现不同的形态.

多态:同样的调用语句有多种不同的表现形态;


多态实现的三个条件

         有继承、有virtual重写、有父类指针(引用)指向子类对象。


多态的C++实现

    virtual关键字,告诉编译器这个函数要支持多态;不是根据指针类型判断如何调用;而是要根据指针所指向的实际对象类型来判断如何调用


多态的理论基础

   动态联编PK静态联编。根据实际的对象类型来判断重写函数的调用。

  动态联编,在运行的时候才确定是执行父类的函数还是子类的函数

  静态联编,C++编译的时候就已经确定要执行的函数。

多态的重要意义

   设计模式的基础 是框架的基石。


实现多态的理论基础

  函数指针做函数参数

C函数指针是C++至高无上的荣耀。C函数指针一般有两种用法(正、反)。


多态原理探究

        Vptr分布初始化



面试题2:谈谈C++编译器是如何实现多态                

1.当类中声明虚函数时,编译器会在类中生成一个虚函数。 

2.虚函数表是一个存储类成员函数指针的数据结构。 

3.虚函数表是由编译器自动生成与维护的。 

4.virtual成员函数会被编译器放入虚函数表中。 

5.存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr指针)。

技术分享



技术分享


技术分享

说明1: 

通过虚函数表指针VPTR调用重写函数是在程序运行时进行的,因此需要通过寻址操作才能确定真正应该调用的函数。而普通成员函数是在编译时就确定了调用的函数。在效率上,虚函数的效率要低很多。 

说明2: 

出于效率考虑,没有必要将所有成员函数都声明为虚函数



面试题3:谈谈你对重写,重载理解

技术分享


面试题4:是否可类的每个成员函数都声明为虚函数,为什么。               

面试题5:构造函数中调用虚函数能实现多态吗?为什么?                        

面试题6:虚函数表指针(VPTR)被编译器初始化的过程,你是如何理解的?   

面试题7:父类的构造函数中调用虚函数,能发生多态吗?   

面试题8:为什么要定义虚析构函数?










本文出自 “魂斗罗” 博客,谢绝转载!

C++多态面试题

标签:c++多态面试题

原文地址:http://990487026.blog.51cto.com/10133282/1796716

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!