Форум программистов, компьютерный форум, киберфорум
Наши страницы

Наследование - вызов конструкторов и деструкторов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему перегруженные операторы ввода/вывода нельзя сделать членами класса? http://www.cyberforum.ru/cpp-beginners/thread1567870.html
Добрый вечер, Решаю домашнее задание, и вот вопрос возник. Создал класс и перегрузил ввода/вывод. Но не нашел информации почему перегрузки ввода/вывода friend. Почему функция не может быть...
C++ Найти площадь заштрихованной области Всем Доброго Времени суток. Мне в техникуме дали задание (прикреплено), и я почему-то совсем не могу понять как это решить... знания в программированию не самые худшие, а во о в математике... http://www.cyberforum.ru/cpp-beginners/thread1567862.html
C++ Оператор взятия адреса
Доброй ночи, оператор взятия адресса не перечислен среди Special member functions, но он реализуется компилятор по умолчанию, если его не реализовать явно. #include <iostream> using...
C++ Алгоритм поиска пути и прорисовка его
Есть класс Карта #ifndef MAP_H #define MAP_H #include <SFML\Graphics.hpp> class Map{ private: int m_level; public:
C++ Undeclared identifier (cout, endl, cin) http://www.cyberforum.ru/cpp-beginners/thread1567849.html
#include "iostream" #include "stdafx.h" #include "cmath" #include "cstdio" using namespace std; int main(void) { int v; cout <<"Vvedite vozrast: "<<endl;
C++ Графы.Список смежности. Поиск в глубину Разработать программу, которая читает числа N, M - кол-во вершин и рёбер графа. Программа сохраняет граф в виде списка смежности и выполняет поиск в глубину. На экран нужно вывести вершины в порядке... подробнее

Показать сообщение отдельно
hoggy
6692 / 2874 / 494
Регистрация: 15.11.2014
Сообщений: 6,466
Завершенные тесты: 1
07.11.2015, 16:44
Цитата Сообщение от mporro Посмотреть сообщение
если нужно манипулировать именно поведением, то наследование избыточный механизм
особенность механизма наследования:
он практичен, что значит прост в эксплуатации

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

например вот этот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
struct Base
{
    std::ostream& hello(std::ostream& stream)const
    {
        concrete_hello(stream);
        return stream;
    }
protected:
    virtual void concrete_hello(std::ostream&)const = 0{};
};
 
struct Derived : Base
{
    Derived(std::ostream& stream)
    {
        Base::hello(stream);
    }
protected:
    virtual void concrete_hello(std::ostream&)const = 0;
};
 
 
struct NextDerived : Derived
{
    NextDerived(std::ostream& stream) : Derived(stream){}
protected:
    virtual void concrete_hello(std::ostream& stream)const
    {
        stream << "Hello, NextDerived" << std::endl;
    }
};
 
int main()
{
    std::cout << "hello, world\n";
    NextDerived nextDerived(std::cout);
}
успешно собрался компилятором от msvc2013:
hello, world
Hello, NextDerived
вопрос: почему процесс не упал на вызове чисто виртуальной функции?
ответ: потому что никаких виртуальных вызовов и не было.
компилятор сумел оптимизировать виртуальный вызов до прямого.

скажем так... с классическим паттерном "стратегия" у компиляторов все намного печальнее.

можно ещё применить статическую стратегию на шаблонах.
пожалуй это будет эффективно.
но это уже тяжелая артиллерия.
шаблоно-магия не всегда приемлема.

Цитата Сообщение от mporro Посмотреть сообщение
NVI не спасает от проблем наследования
а он и не предназначен для этой цели.

NVI - это тупо "фабричный метод".
наследники реализуют лишь мелкие не сильно значащие детальки.
а основняк крутится в базе,
и лишь время от времени тыркает наследников "уточнить мелочовку".

и потом, что такое вообще "проблемы наследования" ?
если речь идет о том,
что приходится вникать в детали базовых классов,
то это проблема их дизайна,
а вовсе не наследования, как такового.

можно же сделать так, что и не придется.
это зависит от конкретных ситуаций,
и конкретных классов.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru