首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 ---- 1....继承表示 : C++ 中继承可以使用 “:” 符号 , 格式为 "class 子类名称 : 父类名称{};" //父类 class Parent{ }; //子类 //继承父类 Parent class...C++ 多继承 : Java 中只能进行单继承 , 但是在 C++ 中是可以继承多个父类的 ; 在多继承时 , 使用 “,” 将多个父类分隔即可 ; 5....外部通过子类调用父类方法 : 如果调用的方法在子类中没有重写 , 那么调用的就是父类的方法 ; //在栈内存中创建一个 Child 对象, 并调用其重写的父类的方法 Child child; //...virtual_method 方法 , 该方法时虚函数 , 子类重写了该虚函数 , 在函数调用的时候 , 会自动根据对象的类型判定调用哪个方法 , 该对象使用 new Child() 创建 , 其类型是

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    小朋友学C++(10):子类构造函数调用父类构造函数

    从哲学层面来看,子类会继承父类除private以外的所有成员。 因为构造函数是公有的,所以理所当然地会被子类继承。...分析: 这里构造函数的写法是 Rectangle() : Shape() { 子类构造函数本身的语句; } 这是先调用父类的构造函数,再执行它本身的语句。从运行结果也可以看出这一点。...那么,如果不显示调用父类的构造函数Shape()呢?父类的构造函数就不被调用了吗? 咱们可以用下面的程序来验证。...分析: 从运行结果可以看出,程序1和程序2的运行结果完全一致。也就是说,Shape()即使不显示调用,实际上也会被调用。并且调用顺序优先于子类本身的构造函数。

    1.5K60

    python之类的重写父类方法与调用父类方法

    Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的类的重写父类方法与调用父类方法。...---- 二、重写父类方法与调用父类方法   在继承关系中,子类会自动继承父类中定义的方法,但如果父类中的方法功能不能满足需求,就可以在子类中重写父类的方法。...1、重写父类的方法示例 #定义一个父类 class Person: def speak(self): #定义方法用于输出 print ('我是一个人类') #定义一个子类...2.子类调用父类方法   如果需要在子类中调用父类的方法,可以使用内置函数super()或通过“父类名.方法名()”的方式来实现。 例:子类调用父类的方法示例。...---- 三、参考 1、廖雪峰的官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python类的重写父类方法与调用父类方法相关知识,可以参考一下,觉得不错的话

    2.7K30

    【Python】面向对象 - 继承 ② ( 子类重写父类成员 | 子类调用父类重名成员 | 子类中使用 父类类名 调用父类成员 | 子类中使用 super 调用父类成员 )

    - 子类重写父类成员 在父类 Animal 中 , 定义了 成员属性 name 和 age , 成员方法 make_sound 函数 ; 在子类 Dog 中 , 对 父类 Animal 的 成员属性 name...1、子类调用父类重名成员语法 在 外部 是无法访问 父类成员 : 子类 重写 父类 成员后 , 通过 子类 实例对象 调用 该 重写后的 成员时 , 默认调用的就是 重写后的成员 ; 在 子类内部 可以...访问父类成员 : 如果需要调用被重写之前的 父类成员 , 则需要使用如下方法 : 方法一 : 使用 父类类名 调用父类成员 ; 调用父类同名成员变量 : 父类类名.成员变量名 调用父类同名成员方法...) 2、代码示例 - 子类中使用 父类类名 调用父类成员 在 Dog 子类中的 make_sound 函数中 , 通过 Animal.name 和 Animal.age 可以调用父类的成员变量 , 打印出来的值为父类的成员变量值...super 调用父类成员 在 Dog 子类中的 make_sound 函数中 , 通过 super().name 和 super().age 可以调用父类的成员变量 , 打印出来的值为父类的成员变量值

    76730

    创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

    static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候父类会调用子类方法...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

    6.2K10

    C++ Trick:小心,子类隐藏父类成员函数

    按常理来说,如果父类的成员函数是public的,那么子类应该也能直接调用父类定义的函数,所谓的“继承”也便是这个含义。...父类有个成员函数set_birth,接收一个string类型,设置生日。比如"1990/10/10"。子类可以直接调用set_birth。 “这有什么值得一说的?”...); } }; int main() { Leader s; s.set_birth(19901010); return 0; } 子类set_birth(int)内调用了父类的...果然,子类已经无法调用父类的public成员函数了。明明刚才还可以,怎么set_birth(string)对子类突然不可见了呢? 奥秘在于,子类重载了父类的同名函数。...此时父类的函数确实对子类是不可见的…… 这其实不是一个复杂的知识点,只是容易让人稍不留意就遗忘。 解决方案是什么呢?其实也不难,想办法让父类的同名函数对子类可见!

    1.8K10

    【C++】STL 算法 ① ( STL 算法相关头文件 | 函数对象 仿函数 简介 | 函数调用操作符 | 重写函数调用操作符的类 | 函数对象 与 普通函数区别 )

    文章目录 一、STL 算法相关头文件 二、函数对象 / 仿函数 简介 1、函数对象 / 仿函数 博客回顾 2、函数调用操作符 3、函数对象 / 仿函数 - 重写函数调用操作符的类 4、函数对象 与 普通函数区别.../ 仿函数 博客回顾 在之前的博客 【C++】STL 容器 - set 集合容器 ⑤ ( 仿函数 functor 简介 | 仿函数 functor 调用 | 自定义类排序规则 - 仿函数 / 重载 <...运算符函数 ) 中 简单的介绍了 " 仿函数 " 概念 ; 在结构体中的 operator() 就是 重载 函数调用操作符 () 函数 ; 在 C++ 语言中 struct 结构体 与 class 类是等同的...、函数对象 / 仿函数 - 重写函数调用操作符的类 " 函数对象 " 是 重载 函数调用操作符 " () " 的 类 , 又称为 " 仿函数 " , 它们是 行为类似函数 的 对象 ; " 函数对象 "...灵活性 : 由于 函数对象 是 类的实例对象 , 开发时可以 通过 继承 和 重载 来 修改 重载函数调用操作符函数 的行为 ; 效率 : 在某些情况下 , 使用函数对象可能 比使用普通函数更有效率 ,

    30610

    【C++】多态 ⑥ ( 函数重定义涉及的问题 - 子类覆盖父类函数名 )

    fun(int a, int b) void fun(int a) 注意 : 是重定义 , 不是重写 ; 重写 需要 为 父类 函数添加 virtual 关键字修饰 , 会有多态效果 ; 重定义 时..., 子类 会 覆盖 父类 的 函数名称 ; 执行 Child c; c.fun(1, 2, 3); 代码 , 尝试调用 父类的 3 个参数的 fun 函数 , 出现错误 , 报错 : error...: 函数重定义 带来的问题 , 子类覆盖父类函数名 ; 函数重定义的函数名称覆盖问题 : C++ 编译器 发现 Child c 对象要调用 void fun(int a, int b, int c) 函数..., 子类中已经存在 fun 函数了 , 子类 会 覆盖 父类的函数名 , C++ 编译器只会在 子类查找 该函数 , 不会去父类 查找 ; 子类查找函数 : C++ 编译器 在 子类中找到了 void...: 没有重载函数接受 3 个参数 ; 4、正确调用函数的方法 在这种情况下 , 由于子类 重定义了部分 父类的重载函数 , 导致 父类的 函数名被覆盖 , 此时需要使用 域操作符 访问父类 被覆盖的函数

    21020

    c++函数调用,函数编写(写自己的函数)以及数组调用,传递

    参考链接: C++函数 在matlab里.m文件分执行文件和函数文件 在c++中执行文件指:main函数 函数文件:其他所有需要用到的函数  在c++中,函数文件名没有特殊讲究,将文件添加到工程目录便能使用...这里还有一点编程技巧 我们通过函数调用的方式进行运算,有两种方式得到运算结果 ①设置函数的返回值,return ②将传入值的地址(即传入值自身)交给函数,函数对其进行运算相当于直接对传入值进行运算。 ...2.输入参数的定义  我们在main中调用其他函数时,我们的输入参数需要提前定义  main () { Mat frame;  int mytime = 10; int imageWidth = 1280...因为我们把我们用到的函数声明都写到一个.h文件里,下次再使用时我们直接#include XXX.h即可,没有必要再对用到的函数一个一个地声明。 ...完成上面的三步,我们自己的函数就制作好了,使用起来比较方便。

    2.3K30

    父类返回子类类型的函数写法

    不过由于我们的这个 Event 的类型比较多,因此希望写一个父类,来一个子类感受下: class DisposableEventBuilder : EventBuilder() { private....build() 我们调用完父类的 retryLimit 方法后,想要设置下 delay,结果发现没有这个方法。 “我 X,这什么玩意儿”,你嘟囔了一句。 因为返回的是父类,所以链式调用掉链子了。...,这个参数则必须是当前类的子类,那么这样的话我们就可以在返回自身类型的位置返回 T 这个类型了。...子类的改动就很简单了,只需要给父类加一个泛型参数为自己的类型即可: class DisposableEventBuilder : EventBuilder...() { ... } 其他的什么也不用动,这时候我们的链式调用就没啥问题了: DisposableEventBuilder().retryLimit(3) .delay(60_

    4.8K10

    C++类的成员函数 | 成员函数

    C++成员函数的性质 在C++中,类的成员函数是函数的一种,它有返回值和函数类型,它与一般函数的区别只是:  属于一个类的成员,出现在类体中。...C++在使用类函数时,要注意调用它的权限以及它的作用域,私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效的数据。 ...在C++中,有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为 private。...这种函数的作用是支持其他函数的操作,是类中其他成员的函数,类外用户不能调用这些私有的函数。  类的成员函数是类体中十分重要的部分。...C++类外定义成员函数 上述所讲成员函数是在类体中定义的,在C++中也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。

    1.9K74

    C++ 构造函数初始化调用顺序及类函数内部嵌套函数情况

    C++构造函数初始化顺序 C++构造函数按下列顺序被调用:(1、2、3、4是按照优先级顺序来的!)...(1)任何虚拟基类的构造函数按照它们被继承的顺序构造; (2)任何非虚拟基类的构造函数按照它们被继承的顺序构造; (3)任何成员对象的构造函数按照它们声明的顺序调用;(如果成员对象有前面出现过的父类...,那么还会调用此对象父类的构造函数一遍,因为第一遍(1)(2)是为了创建子类,第二遍调用是为了构造里面的成员对象。)...调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的顺序。   派生类的构造函数体中的内容。   析构函数的调用顺序相反。  那么再来看以上的例子就很容易理解了。...总结 : 我们必须明确的是当一个类继承与基类,并且自身还包含有其他类的成员对象的时候,构造函数的调用顺序为:调用基类的构造函数->调用成员对象的构造函数->调用自身的构造函数。

    23310

    【C++】多态 ① ( 类型兼容性原则与函数重写 | “ 多态 “ 引入 | 函数重写 )

    函数 , 仍然被 子类 所继承 ; 在 默认的情况下 , 子类 会 隐藏 父类中 被重写的函数 , 如果想要 显示调用 父类 的 被重写的函数 , 可以使用 域作用符 父类名称 :: 被重写的函数()...的方式进行调用 ; 3、类型兼容性原则的几类情况 被重写的 函数 , 遇到 类型兼容性原则 时 , 调用的 函数 是 子类重写的函数 , 还是 父类的原有函数 ; 下面根据如下几种情况进行讨论 : 父类对象...和 子类对象 调用 重写的函数 ; 父类指针 指向 父类对象 / 子类对象 调用 重写函数 的执行效果 ; 父类引用 指向 父类对象 / 子类对象 调用 重写函数 的执行效果 ; 父类指针 作为函数参数...指向 父类对象 , 执行 被子类重写的函数 , 调用的是 父类的 函数 ; 父类 指针 指向 子类对象 , 执行 被子类重写的函数 , 调用的 仍然是 父类的 函数 ; 指针的类型是什么类型 , 调用的就是什么类型的函数..., 执行 被子类重写的函数 , 调用的是 父类的 函数 ; 父类 引用 指向 子类对象 , 执行 被子类重写的函数 , 调用的 仍然是 父类的 函数 ; 引用的类型是什么类型 , 调用的就是什么类型的函数

    20740

    C++ 类构造函数&解析函数

    Contents 1 一,类的构造函数 1.1 1,构造函数作用 1.2 2,默认构造函数 1.3 3,构造函数特点 1.4 4,带参数的构造函数 1.5 5,使用初始化列表来初始化字段 2 二,类的析构函数...2.1 1,析构函数特点 3 参考资料 一,类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。...1,构造函数作用 构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用它的构造函数。...3,构造函数特点 无论是用户自定义的构造函数还是默认构造函数都主要有以下特点: 在对象被创建时自动执行; 构造函数的函数名与类名相同; 没有返回值类型、也没有返回值; 构造函数不能被显式调用。..., 不能被重载; 当对象被撤销时析构函数被自动调用, 与构造函数不同的是, 析构函数可以被显式的调用, 以释放对象中动态申请的内存。

    1.5K20
    领券