C/C++程序基础 (七)继承和多态

  1. 多态

    • 编译时多态:重载
    • 运行时多态:虚函数。根据运行时的类别获取正确的虚指针,从而定位正确的虚函数。
  2. 虚函数
    • 虚函数指针:指向虚函数表。多重继承则含有多个基类的虚函数指针。
    • 虚函数表:函数指针集合。普通继承,子类沿用父类的虚函数表,可以修改基类的虚函数表。
    • 注意:虚函数依赖虚指针,虚指针位于对象内存空间。因此,多态在构造函数之后。
  3. 多重继承
    • 优点:使用多个基类的接口。基类构造顺序与继承列表一致,与初始化列表无关。
    • 问题:冗余基类导致的二义性。
    • 解决方案:虚继承
  4. 虚继承
    • vitual class ××
    • 虚基类指针,每个类有且仅有一个虚基类指针。
    • 注意:虚继承的虚函数表不可以增加,所以子类维护自己的虚函数指针。
  5. 纯虚函数
    • 抽象基类:包含纯虚函数的类,这种类不可以实例化对象(存在未定义的函数)。
    • 纯虚函数和虚函数:1)虚函数不强制子类重写,仅仅为了支持多态。2)纯虚函数主要在于设置接口形式,必须为子类实现。另外,会导致对象不可以实例化。
  6. 总结虚函数指针的问题:
    • 单继承:一个虚函数指针
    • 多重继承:多个虚函数指针,若增加新的虚函数,则修改第一基类的虚函数表
    • 单虚继承:一个虚函数指针,若增加新的虚函数,则为子类增加一个虚函数指针
    • 多重虚继承:多个虚函数指针,若增加新的虚函数,则为子类增加一个虚函数指针

原文地址:https://www.cnblogs.com/niuxu18/p/note_interview_7.html

时间: 2024-10-18 06:48:09

C/C++程序基础 (七)继承和多态的相关文章

C++_基础_继承、多态

内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的拷贝构造和拷贝赋值可能也需要显式的指定父类子对象的拷贝构造和拷贝赋值的方式 2.多继承和虚继承2.1 格式: class 子类名 : 继承方式 父类名1,继承方式 父类名2,... { //子类中的属性和行为 }; 如: 员工类 / \销售员工类 管理者类 \ / 销售管理类 叫做:钻石继承 2.2

5.0OC基础语法-继承、多态

继承继承的基本用法设计两个类Bird.Dog // Bird的声明 @interface Bird : NSObject { @public int weight; } - (void)eat; @end // Bird的定义 @implementation Bird - (void)eat { NSLog(@"吃吃吃-体重:%d", weight); } @end // Dog的声明 @interface Dog : NSObject { @public int weight; }

Python学习记录七---继承、多态和封装

1.创建类 创建文件 test7.py #! /usr/bin/env python class Person: def setName(self, name): self.name = name def getName(self): return self.name def greet(self): print "hello, world! I am %s."% self.name foo = Person() foo.setName('yilia') foo.getName() f

接口、继承、多态

接口.继承.多态 继承和多态是面向对象开发语言中非常重要的饿一个环节,如果在程序中使用继承和多态得当,整个程序的架构将变得非常有弹性,通知书可以减少代码的冗余性. 继承机制的使用可以复用一些定义好的类,减少重复代码的编写.多态机制的使用可以动态调整对象的调用,降低对象之间的依存关系. 1.继承机制中子类的结构化过程 子类的所构造函数,默认都会访问谷类中控参数的构造函数:因为,子类每一个构造行数内的第一行都由依据隐式的super(); 子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

Java基础——封装、继承、多态

Java基础--封装.继承.多态 --小实例快速成长 抽象: 1.目的:将复杂的东西简单化,将繁乱的内容有序化. 2.过程:对相同.相似的东西合而为一,对不同的内容进行归门别类. 3.结果:类.接口. 封装: 1.目的:化零为整,将零散的内容进行归属,进行权限控制. 2.过程:将某对象的属性.方法(功能)统一到其名下,并分别设置.适当的权限进行控制管理. 3.结果:对象,接口. 继承: 1.求大同存小异:在一个系列内,大部分都有的内容,就划归父类:子类将父类的内容继承过来,可以有自身的一些发展和

Java基础继承与多态

Java基础第九天 继承概述 引入 首先我来写两个代码: //定义学生类 class Student {     public void study(){ System.out.println("在教室学习"); } } //定义老师类 class Teacher { public void teach(){ System.out.println("在教室教书"); } } 我们观察上面两个代码: 发现name,age成员变量,以及getXxx()/setXxx()

Java基础知识回顾之三 ----- 封装、继承和多态

前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段.适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 简

Python全栈开发记录_第九篇(类的基础_封装_继承_多态)

有点时间没更新博客了,今天就开始学习类了,今天主要是类的基础篇,我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p/4493506.html 之前我们写的都是函数,可以说是面向过程的编程,需要啥功能就直接写啥,但是我们在编写程序的过程中会发现如果多个函数有共同的参数或数据时,我们也必须多次重复去写,此时如果用面向对象的编程方式就会好很多,这也是面向对象的适用场景. 面向对象三大特性: 一.封装(顾名思义就是将内容封

黑马程序员--oc 类的封装 继承 和多态

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 成员变量的命名规范: 成员变量名要以 _开头 作用: 1.可以让成员变量和get方法的名称区分开 2.可以和局部变量区分开,一看到以_开头的变量一般都是成员变量 封装: 在定义成员变量时,尽量不要用@public 这种写法 ,而是使用set方法和get方法 @interface Student : NSObject { int _age; } /* set方法: 作用:提供一个方法给外界设置成