Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 54
1

Вызов виртуальных функций

21.12.2016, 18:36. Просмотров 2308. Ответов 3
Метки нет (Все метки)

Доброго времени суток, форумчане!
Стоит такая задача:
Есть класс, который содержит три чисто виртуальные функции, назовём его IClass.
Есть три класса, которые унаследованы от него и реализуют эти три функции, назовём их A,B,C.

Нужно написать такую функцию, которая на вход принимает один из этих классов и вызывает их методы. Это должна быть одна функция, без перегрузок( ну, то есть нельзя три функции под каждый тип аргумента).

Я начинаю писать так:
C++
1
2
3
4
5
6
void Method(IClass temp)
{
  temp.func1();
  temp.func2();
  temp.func3();
}
На это ругается VS (на аргумент функции Method, типа нельзя использовать параметр абстрактного типа класса IClass). Я не могу сообразить, как это правильно запилить, подскажите пожалуйста. Заранее спасибо! Добра!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2016, 18:36
Ответы с готовыми решениями:

Таблица виртуальных функций
объясните плиз кто разбирается.. есть абстрактный класс с двумя виртуальными функциями, от него...

Перегрузка виртуальных функций
please HELP! перегружаю виртуальную функцию в абстрактном классе. class ONE { virtual...

Использование виртуальных функций
Программа берет данные из двух файлов, в которых есть дата и количество проданных билетов, и...

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

3
Эксперт С++
1584 / 914 / 777
Регистрация: 06.02.2016
Сообщений: 2,398
Записей в блоге: 28
21.12.2016, 18:58 2
Используй указатель на базовый класс
C++
1
2
3
4
5
6
void Method(IClass *temp)
{
temp->func1();
temp->func2();
temp->func3();
}
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 54
21.12.2016, 19:24  [ТС] 3
Спасибо! Помогло!
Теперь не знаю, как туда передать объект класса, например:
C++
1
IClass*t = new A(arg1,arg2);
ругается на new, говорит: не допускается преобразование в недоступный базовый класс

Добавлено через 43 секунды
А если без new, то пишет, что нет подходящей функции, чтобы преобразовать из A в IClass

Добавлено через 12 минут
проблема решена.
При наследовании пишите public.
Вот идейная сторона:
C++
1
2
class A: public IClass
{...}
Спасибо за помощь, тему можно закрывать!
0
2685 / 1856 / 552
Регистрация: 05.06.2014
Сообщений: 5,361
21.12.2016, 20:10 4
Цитата Сообщение от dimoncraft Посмотреть сообщение
На это ругается VS (на аргумент функции Method, типа нельзя использовать параметр абстрактного типа класса IClass). Я не могу сообразить, как это правильно запилить, подскажите пожалуйста. Заранее спасибо! Добра!
Class&temp
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2016, 20:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Таблица виртуальных функций
Доброго дня! Не могу найти, подскажите, пожалуйста, таблица виртуальных функций же только одна для...

Механизм виртуальных функций
Всем привет! Имею базовый абстрактный класс: class Interface { public: //функция...

ООП перезагрузка виртуальных функций
Помогите, пожалуйста. Задание: "Создать абстрактный базовый класс Матрица с виртуальной функцией...

В чем смысл виртуальных функций?
Читаю книгу Джесс Либерти 'С++ за 21 день', не смотря на глупое название, книга очень грамотная и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.