C++面向对象面试题知识点整理

面向对象
a.编程是在计算机中反映世界
面向系统设计带来的种种便利
(1)良好的可复用性
(2)易维护
(3)良好的可扩充性


b.以下选项中哪一个不是面向对象设计?
(1)面向对象设计的三原则:继承,封装,多态
(2)里氏代换原则是继承复用的基石
(3)开闭原则是面向对象设计的重要特性之一,软件对扩展应该是开放的,对修改应该是关闭的。
(4)防御性编程知识一种编程技巧,与面向设计无关


c.什么是封装?
从字面意思来看,封装就是把一些相关的东西打包成一坨,分装最广为人知的例子,就是在面向对象编程里面,把数据和针对该数据的操作,统一到一个class里面


interface属于继承,virtual属于多态,private属于封装


d.C++中的空类默认产生哪些类成员函数?


对于一个空类,编译器默认产生4个成员函数,默认构造函数,析构函数,复制构造函数,赋值函数


e.struct 和 class 的区别(简单介绍)


区别是Class中的变量默认是private,struct中的变量默认是public。
struct可以有构造函数,析构函数,之间也可以继承,C++中的struct其实和class意义一样,唯一不同的是struct里面的默认访问权限是public,class默认的访问权限是private。


C++中存在struct关键字的唯一意义就是为了让C程序员有个归属感,是为了让C++编译器兼容以前用C开发出来的项目。


f.哪一种成员变量可以在同一个类的实例之间实现共享?


必须使用静态成员变量在一个类的所有实例之间共享数据
(1)如果想限制对静态成员变量访问,则必须把他们声明为保护型或者私有型
(2)不允许用静态成员变量去存放某一个对象的数据
(3)静态成员数据是在这个类的所有对象之间共享的


g.如果要把静态成员数据设为私有,该如何访问?


通过公有静态成员函数访问。


注意:设置了静态成员变量,要给静态成员变量设置初值


h.初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的。


i.虚函数
虚函数就是允许被其子类重新定义的成员函数。


虚函数采用了一种虚调用的方法,虚调用是一种可以在 只有部分信息的 情况下 工作的机制,特别允许我们调用一个只知道接口而不知道其 准确类型的函数,但是如果要创建一个对象,你势必要知道对象的准确类型,因此构造函数不能为空


j.虚函数是非常有效的,但不能把每一个函数都声明为虚函数.
因为虚函数是有代价的,由于每个虚函数的对象都需要维护一个V表,因此使用虚函数时会产生额外的系统开销,如果是一个很小的类,且不想派生其他的类,那么根本没有必要使用虚函数。


k.重写和重载的区别?


子类重新定义父类虚函数的做法,称为重写。
重写的函数必须有一致的参数表和返回值。


重载是指编写一个与已有函数同名但是参数表不同的函数


l.宏,内联函数,模板都可以在编译时解析,但是虚函数不可以,他必须在运行时才能确定
 
m.多态:面向对象编程领域的核心概念。
多态可以简单概括为“一个接口,多个实现”,在程序运行时才可以确定调用哪一个函数


多态时通过继承和虚函数实现的。


n.析构函数也可以设为内联函数(可以通过代码尝试实现)





















































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章