-
只有函数声明没有函数定义的虚函数是纯虚函数; 含有纯虚函数的类叫做抽象类; 不可以使用含有纯虚函数的类实例化对象; 抽象类的子类也可以是抽象类。查看全部
-
纯虚函数:无函数体,定义时要=0 含有纯虚函数的类叫做抽象类,抽象类不能实例化对象,抽象类的派生类也有可能是抽象类,除非子类重新定义了虚函数 虚函数:子类继承父类的多态所需要的一个条件; 虚函数表:使用virtual关键字修饰会自动产生的一个指针列表查看全部
-
定义一个动物(animal)类,要求含有虚函数eat和move,并定义构造函数和虚析构函数 定义一个狗(Dog)类,要求共有继承动物类,定义构造函数和虚析构函数,并实现自己的eat和move函数 使用父类对象实例化子类,调用子类成员函数查看全部
-
在C++中多态的实现是通过虚函数表实现的 当类中仅含有虚析构函数,不含其它虚函数时,也会产生虚函数表 每个类只有一份虚函数表,所有该类的对象共用同一张虚函数表 两张虚函数表中的函数指针可能指向同一个函数。查看全部
-
无论是虚成员函数还是虚析构函数都会在实例化对象中产生一个虚函数表指针,并占四个单元内存查看全部
-
对象的大小:在类实例化对象中,它的数据成员占内存的大小,不包括成员函数 对象的地址:通过一个类实例化一个对象,这个对象在内存中会占用一定的内存单元,这个内存单元的第一个内存的地址就是对象的地址 对象成员的地址:通过一个类实例化一个对象,这个对象可能存在一个或多个数据成员,每一个成员所占的地址就是对象成员的地址 虚函数表指针:在具有虚函数的情况下,实例化一个对象的时候,这个对象的第一块内存当中存在一个指针,这个指针就是虚函数表的指针。查看全部
-
函数重载 overloading--同一个类不同成员函数名称相同,参数不同 重写override--多态 隐藏--继承不能重载,父类都被隐藏 覆盖--virtual定义父类成员函数,子类重写会覆盖掉父类的同名函数, 且地址和实现方式都发生更改。查看全部
-
虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数; 虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数。 只有虚析构函数,没有虚构造函数查看全部
-
虚析构函数:是对子类作用的,用父类指针指向子类,则是对子类进行操作,有了虚析构函数,子类才能继承到父类的析构函数,释放时才会被调用到。查看全部
-
Virtual不能修饰普通函数,virtual修饰的函数必须是某类的成员函数,若是全局函数,则会产生错误;不能修饰静态成员函数;不能是内联函数,若修饰了,系统会忽略inline关键字,而使其成为纯粹的虚函数;不能修饰构造函数。 虚析构函数能够解决在动态多态中存在的内存泄露问题。 由于是用子类实例化的父类对象,在销毁父类对象时,子类的析构函数不会被调用,从而导致了内存泄露问题。通过虚析构函数可以解决。查看全部
-
多态具体到语法是指使用父类指针指向子类对象,并可通过该指针调用子类的方法; 多态是基于类和继承; 多态的语法核心是virtual关键字,必须使用virtual才能使多个类间建立多态关系; 封装、继承、多态是面向对象的三大特性;查看全部
-
动态多态以封装和继承为基础查看全部
-
多态:指相同对象受到不同消息或不同对象收到相同消息时产生不同的动作。 静态多态(早绑定):在运行前,编译阶段就已确定要调用哪个函数,很早就把函数编译进去。 动态多态(晚绑定):不同对象,下达相同指令,产生不同动作。前提:以封装与继承为基础。至少要两个类,父类与子类,用三个类时,动态多态表现地会更明显。 实现多态的成员函数:用virtual修饰函数,使之成为虚函数。查看全部
-
面向对象的三大特征。封装、多态、继承。 多态是,同一个命令,不同的对象会有不同的操作。查看全部
-
隐藏:子类继承父辈,父类的private的成员被隐藏,但是可以通过父类的作用域来进行调用出来。 覆盖:子类的成员函数与父类相同(包括析构函数),父类以virtual的方式定义,子类的同名函数在定义是,会覆盖掉父类的同名函数,且地址和实现方式都发现可更改。查看全部
举报
0/150
提交
取消