美文网首页
关于继承这一章

关于继承这一章

作者: sgy1993 | 来源:发表于2019-03-20 21:17 被阅读0次

如果没有关键字virtual 程序将根据引用类型或者指针类型选择方法,如果使用了virtual,则将根据引用或指针指向的对象的类型来选择方法
下面是一个不加virtual的例子

#include <iostream>
#include <stdio.h>
class sgy {
public:
    void print_some() {
        printf("sgy\n");
    }
};

class sgy_child : public sgy {
public:
    void print_some() {
        printf("sgy_child\n");
    }
};
int main()
{
    sgy_child sgy_child1;
    sgy &sgy1 = sgy_child1;
    //sgy *sgy1 = &sgy_child1
    sgy1.print_some();//这个会调用那个函数呢?
    return 0;
}

输出结果是, sgy1是 class sgy类型的所以他调用的是sgy的print_some函数

根据引用的类型来决定调用函数

root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test# ./test
sgy
root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test#

如果是改成下面的这个呢?


image.png

输出结果如下

root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test# ./test
sgy_child
root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test#

加上virtual之后,则是根据引用对象的类型来决定调用什么函数

另外一定是父类,或者叫基类加上virtual才管用,派生类单独加上virtual是不管用的,即没有多态

即如果是下面这样


image.png

输出的结果是

root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test# ./test
sgy
root@iZ2ze9yqb3xdqngyx445idZ:~/sgy/test#

所以不加父类不加virtual,一定要是基类,否则子类有virtual,不能实现多态

相关文章

  • 关于继承这一章

    如果没有关键字virtual 程序将根据引用类型或者指针类型选择方法,如果使用了virtual,则将根据引用或指针...

  • Python学习笔记(13)-黑马教程面向对象之继承

    前言 这是黑马Python培训教程面向对象这一章中的继承(inheritance)部分。 什么是继承(inheri...

  • 提示十九

    今天来看提示十九:要么为继承而设计,并提供文档说明,要么就禁止继承。 之前说过继承会带来很多危险,所以这一章讨论了...

  • 原型模式(三)

    参考: 构造函数的继承 非构造函数的继承 前面两节主要学习javascript原型的基本语法和理论,这一章主要来聊...

  • 你不知道的JavaScript(上卷):第四章:混合对象类

    这一章到底在说什么? 面向类的设计模式:实例化、继承、多态。 具体怎么说的? 4.1:类理论 什么是类:类/继承表...

  • Effective c++ 学习笔记(item36)

    这一章要交代的事情就是不要在继承类中重定义non virtual函数。 这个在前面的章节中反复强调了。 这一章中对...

  • 关于继承

    人是流动的,制度比之永恒,至少它长于人的一生。

  • 关于继承

    继承的实现方法 属性拷贝 浅拷贝 深拷贝 原型继承 原型式继承 原型链继承 组合继承(深拷贝+优化后的原型式继承)...

  • 关于继承

  • 关于继承

    1、可以把多个类都具备的属性和方法存到父类中,提高代码的复用性 2、继承的实现方式: ①绑定构造函数(call、a...

网友评论

      本文标题:关于继承这一章

      本文链接:https://www.haomeiwen.com/subject/jekxvqtx.html