C++ 虚函数个人理解

C++中的虚函数指的是class类中加上了关键字virtual的函数。

虚函数的意义在于动态绑定,也就是说父类指针可以调用子类的函数实现,示例如下:

#include "stdio.h"

class Animal {
public:
    virtual void name() { printf("I'm Animal\n"); }
};

class Cat : public Animal {
public:
    virtual void name() override { printf("I'm Cat\n"); }
};

void func(Animal *animal) {
    animal->name();
}

int main(void) {
    func(new Animal());
    func(new Cat());
    return 0;
}

输出的结果如下:

I'm Animal
I'm Cat

这里可以看出虽然函数里是父类的指针,但是实际调用的函数根据传进来的类动态变化。


下面是另外一个例子:

#include "stdio.h"

class Animal {
public:
    virtual void name() { printf("I'm Animal\n"); }
};

class Cat : public Animal {
public:
    virtual void name() override { printf("I'm Cat\n"); }
};

void foo(Animal a, Cat b, Animal *r) {
    a.name();
    b.name();
    r->name();
}

int main(void) {
    Cat b;
    foo((Animal) b, b, &b);
    return 0;
}

运行结果如下:

I'm Animal
I'm Cat
I'm Cat

这段代码人意思很好理解,我们着重看一下foo函数的汇编代码:
在这里插入图片描述
可以看到对于固定对象调用虚函数,调用是直接写死在汇编代码中的,被称为静态绑定。
如果使用父类的指针调用虚函数,具体调用哪个函数是动态绑定,也就是运行代码时才知道的。

发布了543 篇原创文章 · 获赞 223 · 访问量 71万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览