美文网首页
C++中的虚函数一点理解

C++中的虚函数一点理解

作者: 梦在原点 | 来源:发表于2018-03-22 23:23 被阅读0次

今天在看C++的时候,了解到了一个新的概念:虚函数,这使我联想的Java里的一些东西,废话少说,直接上代码

#include<iostream>
using namespace std;

class Animal
{
    public: 
        void Eat()                          
        {
            std::cout<<"Animal eat!"<<endl;
        }
        
        virtual void Move()                 //声明了虚函数 
        {
            std::cout<<"Animal move!"<<endl;
        }
};

class Tiger : public Animal
{
    public:
        void Eat()
        {
            std::cout<<"Tiger eat!"<<endl;  
        }
        
        void Move()
        {
            std::cout<<"Tiger Move!"<<endl;
        }
};
int main()
{
    Tiger* tiger = new Tiger;
    Animal* animal = tiger;
    animal->Eat();
    animal->Move();
}

可以看出,在主函数中实例化了一个Tiger类,然后又实例化了一个Animal类,但在栈内存里生成的animal指向了tiger在堆内存的空间,看一下运行的结果


image.png

在Animal的Move函数里有virtual标识,所以在运行的时候才区判断到底是谁的Move方法.而这时的animal是指向(tiger所指的堆内存)的指针,所以这里就调用了Tiger的Move函数.
再看一下在Java里的实现

class Animal{
    public void Eat(){
        System.out.println("Animal Eat!");
    }
    public void Move(){
        System.out.println("Animal Move!");
    }
}

class Tiger extends Animal{
    public void Eat(){
        System.out.println("Tiger Eat!");
    }
    public void Move(){
        System.out.println("Tiger Move!");
    }
}

public class Demo {
    public static void main(String args[]){
        Tiger tiger = new Tiger();
        Animal animal = tiger;
        animal.Eat();
        animal.Move();
    }
}

结果如下:


image.png

我的理解是:Java应该是默认Animal类的所有方法都是virtual表示,当然这有些不恰当.

不过从这点可以看出,Java真的是阉割掉了C++里的很多东西.
O(∩_∩)O

相关文章

  • C++中的虚函数一点理解

    今天在看C++的时候,了解到了一个新的概念:虚函数,这使我联想的Java里的一些东西,废话少说,直接上代码 可以看...

  • JAVA 虚函数、抽象函数、抽象类、接口

    Java 虚函数虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有...

  • C++中的(纯)虚函数

    简介 本章节会介绍在C++中虚函数及纯虚函数的主要作用,C++也是通过虚函数实现动态绑定,本小节不会去讲述动态绑定...

  • C++虚函数表

    虚函数表 C++中虚函数是通过一张虚函数表(Virtual Table)来实现的,在这个表中,主要是一个类的虚函数...

  • 理解C++虚函数

    title: 理解C++虚函数date: 2018-11-11 15:31:26categories:- 概念理解...

  • C++中的 "override"

    简介 本章节主要介绍在C++中override关键字的主要作用。在阅读本章节前,需要先理解C++中的虚函数. 例程...

  • JAVA – 虚函数、抽象函数、抽象类、接口 与cpp对比

    1. Java虚函数 虚函数的存在是为了多态。 C++中普通成员函数加上virtual关键字就成为虚函数 Java...

  • C++语言-多态,纯虚函数,模版函数

    1、虚函数、纯虚函数 需要注意的是,纯虚函数子类是必须继承的,虚函数不是不必须继承的。 2、多态 在C++中默认关...

  • GeekBand-C++面向对象高级编程(下)-Week2

    对象模型:虚函数表(vtbl)与虚表指针(vptr) 我们知道,C++中,可以通过虚函数来实现多态性,而虚函数是通...

  • C++ 虚函数

    C++ 虚函数 虚函数 基类中使用virtual关键字声明的函数,称为虚函数。虚函数的实现,通过虚函数表来实现的。...

网友评论

      本文标题:C++中的虚函数一点理解

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