Рубрики

Что происходит, когда виртуальная функция вызывается внутри не виртуальной функции в C ++

Предсказать вывод следующей простой программы на C ++ без какой-либо виртуальной функции.

#include <iostream>

using namespace std;

  

class Base

{

public:

    void print()

    {

        cout << "Base class print function \n";

    }

    void invoke()

    {

        cout << "Base class invoke function \n";

        this -> print();

    }

};

  

class Derived: public Base

{

public:

    void print()

    {

        cout << "Derived class print function \n" ;

    }

    void invoke()

    {

        cout << "Derived class invoke function \n";

        this -> print();

    }

};

  

int main()

{

    Base *b = new Derived;

    b -> invoke();

    return 0;

}

Выход:

Base class invoke function
Base class print function

Поскольку виртуальной функции нет , полиморфное поведение во время выполнения не работает в приведенном выше коде. Теперь прогнозируем вывод следующей программы на C ++.

#include <iostream>

using namespace std;

  

class Base

{

public:

    virtual void print()

    {

        cout << "Base class print function \n";

    }

    void invoke()

    {

        cout << "Base class invoke function \n";

        this -> print();

    }

};

  

class Derived: public Base

{

public:

    void print()

    {

        cout << "Derived class print function \n" ;

    }

    void invoke()

    {

        cout << "Derived class invoke function \n";

        this -> print(); // вызывается под не виртуальной функцией

    }

};

  

int main()

{

    Base *b = new Derived;

    b -> invoke();

    return 0;

}

Выход:

Base class invoke function
Derived class print function

Таким образом, полиморфное поведение работает, даже когда виртуальная функция вызывается внутри не виртуальной функции. Вывод можно догадаться из того факта, что вызываемая функция определяется во время выполнения с использованием vptr и vtable .

Эта статья предоставлена Sumit Jaiswal . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Что происходит, когда виртуальная функция вызывается внутри не виртуальной функции в C ++

0.00 (0%) 0 votes