Форум программистов, компьютерный форум CyberForum.ru

Как через базовый класс вызывать виртуальную функцию во всех потомках? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Данная целочисленная матрица. Найти элемент, являющийся максимальным в своем строке и минимальным в своем столбце http://www.cyberforum.ru/cpp-beginners/thread900325.html
Данная целочисленная матрица размерности MхN. Найти элемент, являющийся максимальным в своем строке и минимальным в своем столбце. Если таких элементов нет-вывести 0.
C++ как подсчитать количиство цифр в строке? Дана строка. Подсчитать количество цифр в каждой строке. http://www.cyberforum.ru/cpp-beginners/thread900317.html
C++ Двунаправленный линейный список. Поиск с барьером
Задание : Реализовать двунаправленный линейный список. Поиск с барьером. Надо доделать поиск с барьером, у меня не получается. Помогите пожалуйста. #include <stdlib.h> #include <iostream.h> struct Node //Структура являющаяся звеном списка { int x; //Значение x будет передаваться в список
Реализовать Очередь. Циклический список. Удалить указанный элемент и все предшествующие C++
Реализовать Очередь. Циклический список. Удалить указанный элемент и все предшествующие. Помогите пожалуйста очень срочно надо. Спасибо заранее.
C++ Массивы,прокомментировать http://www.cyberforum.ru/cpp-beginners/thread900305.html
Здравствуйте,нужна ваша помощь.Нужно прокомментировать код С++ задачи на массивы. Условие задачи - Дан целочисленный массив размерности n. "Сожмите" массив, выбросив из него каждый второй элемент. (Примечание: Дополнительный массив не использовать.) #include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv) { int n;
C++ Вычислить значение первых 15 элементов геометрической прогрессии вычислить значение первых 15 элементов геометрической прогрессии, когда известен первый элемент а = 2 и ее знаменатель g = 1.5.Наступний элемент * геометричноq прогрессии образуется умножением предыдущего на знаменатель прогрессии (зделать масивами без использования Using namespase std) подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.06.2013, 10:47     Как через базовый класс вызывать виртуальную функцию во всех потомках?
Это изврат вообщем-то...

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <algorithm>
 
class Father
{
public:
   Father()
   {
   }
   template<typename Derived>
   Father(Derived* der)
   {
      deriveds.push_back(der);
   }
   virtual ~Father() {}
   virtual void print() const
   {
      call();
   }
   static void erase(Father* f)
   {
       auto pos = std::find(deriveds.begin(), deriveds.end(), f);
       if (pos != deriveds.end())
       {
           deriveds.erase(pos);
       }
   }
private:
   static void call()
   {
      std::for_each(deriveds.begin(), deriveds.end(), [](const Father* p)
      {
         p->print();
      });
   }
   static std::vector<Father*> deriveds;
};
 
std::vector<Father*> Father::deriveds;
 
class Derived : public Father
{
public:
   Derived() : Father(this) {}
   ~Derived() { erase(this); }
   void print() const
   {
      std::cout << "Derived" << std::endl;
   }
};
 
int main()
{
   Derived d1, d2, d3, d4;
   Father p;
   p.print();
}
 
Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru