Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Заблокирован

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

13.06.2013, 10:21. Показов 763. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ну например, есть класс:
C++
1
2
3
4
5
6
7
class BATYANA
{
     BATYANA();
     virtual ~BATYANA();
 
     virtual int Test();
}
и есть куча классов потомков от BATYANA, типа
C++
1
2
3
4
5
6
7
8
class SINOK : public BATYANA
{
     SINOK();
     ~SINOK();
 
     int Test();
 
}
Как мне сделать так, чтоб я создал объект базового класса и при вызове в нём функции Test() она бы вызвалась во всех классах потомках, на данный момент созданных?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2013, 10:21
Ответы с готовыми решениями:

Создать абстрактный класс с общими полями и методами. В производных классах перегрузить чисто виртуальную функцию - общая стоимость всех изделий
Помогите пожалуйста!!! Не могу правильно создать абстрактный класс! Создать абстрактный класс с общими полями и методами. В производных...

Класс: как обратиться к методу производного класса через итератор на базовый класс?
Есть абстрактный и два порожденных. Хочу создать например list<Base*> list1; затем добавляю себе в список: ...

Как через цикл вызывать функцию и передавать ей параметры
Добрый вечер.Мой код выглядит сейчас так $BotObject = new BotObject(0); $k = $BotObject->GetMethod(0); $k_2 =...

8
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
13.06.2013, 10:30
Цитата Сообщение от FarStar Посмотреть сообщение
на данный момент созданных?
Хранить указатели на созданные экземпляры
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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();
}
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
13.06.2013, 10:53

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Это изврат вообщем-то...
это транслит же? :D
Цитата Сообщение от ForEveR Посмотреть сообщение
call();


Еще не помешал бы в деструктор
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.06.2013, 10:55
Croessmah,
Еще не помешал бы в деструктор
Зачем?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
13.06.2013, 10:56
Цитата Сообщение от FarStar Посмотреть сообщение
Как мне сделать так, чтоб я создал объект базового класса и при вызове в нём функции Test() она бы вызвалась во всех классах потомках, на данный момент созданных?
В общем случае никак
ибо класс ничего не знает о своих потомках (тем паче объектах)
или извращайся как посоветовал ForEveR
или измени условия задачи
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
13.06.2013, 11:02
Цитата Сообщение от ForEveR Посмотреть сообщение
Зачем?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void foo(){
    Derived errorObjects[100];//После выхода из функции, указатели на эти объекты остаются в векторе
}
 
 
int main()
{
   Derived d1, d2, d3, d4;
   Father p;
    foo();
   p.print();
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.06.2013, 11:03
Croessmah, Я тебя понял, да. Поменял, спасибо.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.06.2013, 14:01
Очень похоже, что ТС неправильно понял задачу и напридумывал не пойми что. Мне вот почему-то на ум сразу приходит паттерн "компоновщик", со всеми вытекающими. Но, может быть, ТСу действительно нужен какой-то другой изврат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2013, 14:01
Помогаю со студенческими работами здесь

Как управлять наследниками через базовый класс
Всем привет)Есть вот одна проблема. Хочу управлять объекты через другие объекты. Допустим есть базовый класс class base { ...

Как ловить изменение значения переменной и вызывать функцию через connect?
Есть переменная QString page = &quot;index&quot;; Как ловить изменение переменной и при изменении её вызывать функцию свою. connect(page,...

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;typeinfo&gt; using...

Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный?
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах? Например //Абстрактный базовый класс ...

Единый базовый класс для всех производных
Здравствуйте! У меня есть два класса - базовый (Base) и производный (Child). В начале я создаю объект класса Base - b и вывожу его адрес (в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru