C ++ Является ли чисто виртуальная функция также определением или только объявлением? - PullRequest
1 голос
/ 06 марта 2019

В курсе программирования на C ++ я узнал о разнице между определением и объявлением.Функция без тела функции является объявлением, а функция с телом функции является определением.Позже я узнал о чисто виртуальных функциях.Чистая виртуальная функция не имеет тела функции, но она «инициализируется» с помощью = 0;.Означает ли это, что чисто виртуальная функция является определением или она рассматривается только как объявление?

Редактировать: я не думаю, что это дубликат чисто виртуальной функции с реализацией , потому чтовопрос "Означает ли это, что чисто виртуальная функция является определением или она рассматривается только как объявление?"не ответил.

1 Ответ

0 голосов
/ 06 марта 2019

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

Подробнее читайте в https://www.geeksforgeeks.org/virtual-functions-and-runtime-polymorphism-in-c-set-1-introduction/

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

Следует отметить, чтоЕсли у вас есть чисто виртуальная функция в классе, вы не можете создать ее экземпляр как объект.

посмотрите на следующий пример

class Base {
public:
    virtual string getType() = 0;
}

class Derived : public base {
public:
    string getType();
}

string
derived::getType() {
    //do necessary stuff <------------------ (1)
}

Base* myBase = new Derived(); // OK
myBase->getType() //this will call the logic at (1).That's in the derived class but not base

Base* myBase2 = new Base();//Error

И на ваш вопрос, pure virtualФункция является декларацией. И не нуждается в определении.

* РЕДАКТИРОВАТЬ Вы можете предоставить реализацию по умолчанию, но вы должны переопределить в производных классах этого базового класса чисто виртуальную функцию *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...