Рубрики

Можно ли встроить виртуальные функции?

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

По умолчанию все функции, определенные внутри класса, неявно или автоматически считаются встроенными, за исключением виртуальных функций (обратите внимание, что встроенный — это запрос к компилятору и его компиляторам выбрать встраивание или нет).

Всякий раз, когда виртуальная функция вызывается с использованием ссылки или указателя на базовый класс, она не может быть встроенной (поскольку вызов разрешается во время выполнения), но всякий раз, когда вызывается с использованием объекта (без ссылки или указателя) этого класса, она может быть встроенной, поскольку компилятор знает точный класс объект во время компиляции.

#include <iostream>

using namespace std;

class Base

{

public:

    virtual void who()

    {

        cout << "I am Base\n";

    }

};

class Derived: public Base

{

public:

    void who()

    

        cout << "I am Derived\n";

    }

};

  

int main()

{

    // обратите внимание, здесь виртуальная функция who () вызывается через

    // объект класса (будет разрешен при компиляции

    // время), поэтому оно может быть встроено.

    Base b;

    b.who();

  

    // Здесь виртуальная функция вызывается через указатель,

    // поэтому он не может быть встроен

    Base *ptr = new Derived();

    ptr->who();

  

    return 0;

}

Ссылки:
http://www.parashift.com/c++-faq/inline-virtuals.html
Эффективный C ++, Скотт Мейерс

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

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

Можно ли встроить виртуальные функции?

0.00 (0%) 0 votes