二十四:面向对象
(1)数据抽象:接口实现分离。
继承:定义相似的类型
多态:以统一的方式使用。(【父类】引用或指针调用虚函数 实现多态【动态绑定】)
如果表达式也不是引用,也不是指针,则动态类型永远与静态类型一致。
virtual 在基类函数中说明,子类的相同函数默认都是virtual
子类参数列表(const/引...
分类:
编程语言 时间:
2016-05-18 19:31:44
阅读次数:
205
C++虚函数浅析:
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时绑定,要么试图做到运行时绑定。
...
分类:
编程语言 时间:
2016-05-18 18:48:12
阅读次数:
262
代码: 输出: 分析: 1、静态成员变量不能在类中初始化,需要在类外初始化。 2、静态成员函数只能访问静态成员变量,普通成员函数则没有这个限制。 3、静态成员函数不能为虚函数。 ...
分类:
编程语言 时间:
2016-05-18 15:56:24
阅读次数:
129
析构函数是当一个对象的生命周期结束时自动调用的一个函数。在含有派生类与基类classSubject
{
public:
~Subject();
Subject();
};
classConcreteSubject:publicSubject
{
public:
ConcreteSubject();
~ConcreteSubject();
};
Subject*con=newConcreteSubject();
dele..
分类:
编程语言 时间:
2016-05-18 14:45:13
阅读次数:
327
参考博客:点我 要点:Java中的普通函数默认为虚函数,因此动态绑定的行为是默认的,而C++必须将方法声明为虚函数(virtual关键字),执行时才会进行动态绑定,详细区别可参考代码以及注释。 代码大致:实现父类 Animal类,包含数据成员 姓名和年龄,以及实现eat方法和informa方法,子类 ...
分类:
编程语言 时间:
2016-05-17 19:43:07
阅读次数:
215
一、接口的定义 有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供 给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家 ...
分类:
编程语言 时间:
2016-05-17 19:11:11
阅读次数:
184
一、三种继承方式 private 基类的公有成员与保护成员成为派生类的私有成员 public 基类的成员访问权限不变 protected 基类的公有成员与保护成员将成为派生类的保护成员 二、三种继承方式的对比: 三、在没有虚函数的情况下,类指针调用函数是注意: 如果以一个基类指针指向派生类对象,那么 ...
分类:
编程语言 时间:
2016-05-16 17:26:22
阅读次数:
178
多态 什么是多态:对各种对象发出同一种指令时,各个对象能根据自身的情况作出相应的响应 如果希望在调用函数时系统根据对象真是类型去转调用相应的函数,需要把那个函数声明为virtual虚函数。子类中可以覆盖这个函数,也自动成为虚函数。覆盖(owerride)要求函数名和参数表都相同返回类型也要一致(比如 ...
分类:
编程语言 时间:
2016-05-13 20:45:52
阅读次数:
218
(1)、重载,覆盖和隐藏的区别; 重载主要是函数的重载,函数名相同,返回类型相同,但是函数形参不同,被调用时,根据函数形参决定调用原函数还是重载函数。 覆盖主要用在继承多态中,函数前加virtual关键字,子类继承了父类的某个虚函数,利用父指针调用时,子类的虚函数将父类的虚函数覆盖。 隐藏是指派生类 ...
分类:
编程语言 时间:
2016-05-13 20:32:14
阅读次数:
169
之前面试的时候经常会问到关于C++中析构函数为什么会是虚函数的问题,虽然这个问题在面试中已经问烂了,但是这个问题在网上也并没有一个特别好的全面的解答,最近翻看effective c++,条款07解释的非常好,筛选出一部分分享给大家。 当派生类对象经由一个基类指针被删除,而该基类的析构函数非虚,其结果 ...
分类:
编程语言 时间:
2016-05-13 08:12:14
阅读次数:
126