Тот факт, что тип функции определяется во время выполнения определяется как преимущество? - PullRequest
0 голосов
/ 03 июля 2018

Я читал, что одним из преимуществ использования «наследования» для универсального кода является «тот факт, что тип объекта определяется во время выполнения», поскольку это обеспечивает большую гибкость.

Я не понимаю этого вопроса. Как это действительно позволяет больше гибкости?


Если, например, я получаю объект от типа, который получил Base, то есть:

class Base{  
public:   
virtual void method() const { /* ... */ }
};

class D1 : public Base{  
public:   
 void method() const override { /* ... */ }
};

class D2 : public Base{  
public:   
 void method() const override { /* ... */ }
};

И я отправляю в функцию f (например) следующий объект:

Base* b = new D1;
f(b);

Где гибкость (что определяется как преимущество, которое выполняется во время выполнения)?

1 Ответ

0 голосов
/ 03 июля 2018

Ваш пример не демонстрирует это, но может.

f(b) может быть

void f(Base* b) {
    b->method();
}

Теперь фактический код method(), который выполняется, определяется в время выполнения типом передаваемого объекта.

Как это действительно обеспечивает большую гибкость?

Это более гибко, потому что автору f(..) не нужно знать, как Base:method() работает в каждом конкретном случае: вы можете добавлять классы D3, D4, D5 с новыми реализациями method() без f(..) когда-либо нужно знать или изменить.

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