普通成员函数调用虚函数

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通成员函数调用虚函数相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;

class A 
public:
    void func() 
        printFunc();
    
protected:
    virtual void printFunc() 
        cout << "AAAA" << endl;
    
;

class B : public A 
public:
    void func() 
        printFunc();
    
protected:
    virtual void printFunc() 
        cout << "BBBBB" << endl;
    
;


int main() 
    B b;
    A* a = &b;
    //这里的a是一个指向子类对象的父类指针
    a->func();
    cout << "11111" << endl;
    b.func();
    return 0;

当a调用func时,因为func不是虚函数,所以会根据指针类型走A类的实现。
但是在A类的成员函数func中,默认传入了a,a是一个指向子类对象的父类指针,因此会在A的func内发生多态,从而调用B类中的虚函数实现。

以上是关于普通成员函数调用虚函数的主要内容,如果未能解决你的问题,请参考以下文章

如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?

C++ 中,类的继承:父类当使用虚函数时候,子类对该函数进行重写的话,属于子类成员函数对虚函数的覆盖!

类的 多态

c++虚函数问题,大神请进

关于虚函数,类的内存分布以及类的成员函数调用原理

C++程序设计POJ》《WEEK6 多态与虚函数》