1 昨日回顾 2 多态的原理 1 要有继承 2 要有子类重写父类的虚函数 3 父类指针(或者引用)指向子类对象 (动态联编 虚函数表 3 证明vptr指针的存在 4 vptr指针在构造父类的时候是分步初始化的 Child c; 1. 先调用Parent的构造函数 2. 调用的时候vptr指针会先指向父类的虚函数表 5 vptr指针分步的安全性 根据上一节课所讲内容 应该可以得出结论: 6 父类指针和子类指针的步长 这样虽然能运行,但是要注意,如果子类的private中多了一个int b 那么子类…
一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个类中含有虚函数,则必须将该类的析构函数声明为虚函数. 4.虚函数与纯虚函数的声明: virtual void draw();//虚函数 virtual void draw() = 0;//纯虚函数 5.C++中支持两种多态性: 编译时多态:通过重载函数实现. 运行时多态:通过虚函数实现. 二.Jav…
C++基础之纯虚函数与抽象类 引言 纯虚函数在C++编程中的地位很重要,其关联到了设计模式中"接口"的概念. 语法 纯虚函数的语法: 1.  将成员函数声明为virtual 2.  后面加上 = 0 3.  该函数没有函数体 class <类名> { ; - }; 例如: class CmdHandler { ; - }; 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做.这就是纯虚函数的作用. 抽象类 含有纯虚函数的…
一.纯虚函数 虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 定义纯虚函数: class 类名{         virtual 返回值类型 函数名(参数表) = 0:     }; 纯虚函数不需要实现 二.抽象类 作用 抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在一个继承层次结构…
一.C++多态 C++的多态包括静态多态和动态多态.静态多态包括函数重载和泛型编程,动态多态包括虚函数.静态多态是指在编译期间就可以确定,动态多态是指在程序运行时才能确定. 二.虚函数 1.虚函数为类的非静态成员函数,访问权限一般为public.函数声明时,在返回值前加virtual关键字,函数定义时不需要加virtual.父类定义的虚函数,子类在继承时,可以对虚函数重新定义,当然子类的函数应该与父类虚函数一样,只是函数实现不一样.我们用父类的指针指向子类的实例,然后通过父类的指针可以调用实际子…
多态 同一函数调用形式(调用形式形同)可以实现不同的操作(执行路径不同),就叫多态. 两种多态: (1)静态多态:分为函数重载和运算符重载,编译时系统就能决定调用哪个函数. (2)动态多态(简称多态):运行时系统根据基类指针或引用的指向,才能知道调用哪个对象里的虚函数实现.  动态多态是通过虚函数实现的,针对的也是虚函数. 实现了从是谁调用谁到指向谁调用谁的重大转变. 这是析构函数声明为虚函数的原因,可以防止delete基类指针时,只调用基类析构函数造成的内存泄露. 虚函数 虚函数的作用:在基类…
1.功能覆盖 ClassA , ClassB ,其中ClassB继承ClassA 类的定义如下面的: #ifndef _CLASSA_H #define _CLASSA_H #include <iostream> using namespace std; class ClassA { public: ClassA(void); ~ClassA(void); void method(); }; #endif #include "stdafx.h" #include "…
一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型,我们如果想通过一个父类指针调用父类.子类中的同名函数的话,这个函数是有要求的: 在父类中,eat函数声明之前必须要加virtual声明eat()函数为虚函数. 一旦某个函数被声明为虚函数,那么所有派生类(子类)中eat()函数都是虚函数. 为了避免你在子类中写错虚函数,在C++11中,你可以在函数…
c++是面向对象语言,面向对象有个重要特点,就是继承和多态.继承之前学过了,就是一种重用类的设计方式.原有的类叫父类,或者基类,继承父类的类叫子类.在设计模式中,我们总是要避免继承,推荐用组合.因为继承会导致类爆炸.类太多了,就太累了...哈哈... 说说多态,多态,从我们语言的语法上说,就是通过父类的指针能直接调用子类的方法,在父类的层面,无需了解子类的实现.在我理解来看,其实多态,也是解耦的一种实现方式,因为子类的实现和父类没有关系了,父类总是可以调用到相关的函数. 但是如果我们父类有完整的…
一.基本语法 在C++中,可以将虚函数声明为纯虚函数,语法格式为: ; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数. 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”. 包含纯虚函数的类称为抽象类(Abstract Class).之所以说它抽象,是因为它无法实例化,也就是无法创建对象.原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间. 抽象类通常是作为基类,让派生类去实现纯虚函数.派生类必须…