C++中面向对象的相关内容

来源:互联网 发布:黄磊人设崩塌 知乎 编辑:程序博客网 时间:2024/05/22 03:27
一、概述
(一)面向对象设计的三原则:封装、继承和多态
1、封装:
(1)C和C++中通过头文件的包含(#include)
(2)通过namespace/package/module
2、C++中空类,编译器默认产生4个成员函数:默认构造函数、析构函数、复制构造函数、赋值函数
3、C++中class和struct的区别:
其实意义一样,唯一不同就是struct里面默认的访问控制是public,class中默认的访问控制是private,C++中存在struct关键字的唯一意义就是为了让C程序员有个归属感,是为了让C++编译器兼容以前C开发的项目
4、哪一种成员变量可以在同一个类的实例之间共享?
静态成员变量。如果要限制对静态成员变量的访问,则必须把他们声明为保护型或私有型。私有的静态成员数据可以通过公有的静态成员函数去访问。
5、类构造函数的初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的。常量必须在构造函数的初始化列表里面初始化或者将其设置成static。
6、析构函数可以为virtual型,构造函数则不能。为什么?
虚函数采用一种虚调用的方法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,你势必要知道对象的准确类型,因此构造函数不能为虚。
7、虚函数是非常有效的 ,我们是否可以把每个函数都声名为虚函数?
不行,虚函数也是有代价的,由于每个虚函数的对象都必须维护一个V表,因此在使用虚函数的时候都会产生一个系统开销。
8、析构函数可以是内联函数。(什么是内联函数?
9、多态(见多态实现的机制
10、虚函数和纯虚函数的区别
(1)虚函数中的函数是实现的哪怕是空实现,它的作用是这个函数在子类里面可以被重载,运行时动态绑定实现动态
纯虚函数是个接口,是个函数声明,在基类中不实现,要等到子类中去实现
(2) 虚函数在子类里可以不重载,但是虚函数必须在子类里去实现。
11、友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但它是可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是它破坏了类的封装性和隐藏性
12、String类的实现
13、继承:公有继承、私有继承、保护继承、多重继承、虚继承
14、虚函数继承和虚继承:每个对象里有虚表指针,指向虚表,虚表里存放了虚函数的地址。虚函数表顺序存放虚函数地址的,不需要用到链表(link list)。虚继承是指虚拟继承,虚拟基类是为了解决多重继承而出现的,虚函数继承和虚继承是两个完全不同的概念。
15、如果类继承中不指定public,C++默认的是私有继承,私有继承是无法继承并使用父类函数中的公有变量的
16、C++如何阻止一个类被实例化?使用抽象类,或者构造函数被声明成private。构造函数设为private,并不能阻止编译器生成默认的copy constructor,只要程序中没写,编译器都会生成默认的copy constructor
17、内存对象模型(见后面分析)




原创粉丝点击