0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 18
1

Полиморфизм, наследование

24.05.2017, 16:47. Показов 980. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, кто может, объясните пожалуйста.

Просят добавить новый тип объектов Trap. Методы в нем объявлены как виртуальные, но в примере я не вижу чтобы Trap наследовался от какого либо заранее созданного класса. А если он не наследуется, то смысл тогда с виртуальных функций?

вот тот фрагмент кода, который дан в качестве примера:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Trap
    
{
public:
 
    double x,y,F,r;
 
    Trap(double x, double y, double F, double r);
    virtual ~Trap(void);
    virtual void Draw(HDC dc);
 
    virtual void MoveBall (CBall*b);
 
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2017, 16:47
Ответы с готовыми решениями:

Наследование, полиморфизм
Не могу реализовать полиморфизм для метода getShow() ну и в теории сетШов(). Но сейчас о гете...

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

Наследование и полиморфизм.
Вопрос следующий. Как мне вытащить функцию из родителя класса родителя, при условии что родителей...

Наследование и полиморфизм...
Есть спецы в этой теме?) Сейчас пишу курсовую, в методичке (препод сильно снижает за отклонения от...

3
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
24.05.2017, 17:21 2
Jim_Hunter, смысл в том, что виртуальные функции важны не для самого класса где они объявлены, а для наследников этого класса. Для самого класса они работают точно так же как обычные, а вот для его наследников... Кстати у наследников функции с таким же названием и аргументами станут виртуальными вне зависимости от того, добавишь ли к ним это ключевое слово или нет...
1
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 18
24.05.2017, 18:16  [ТС] 3
Дело в том что у этого класса нет наследников, и не будет в дальнейшем. Функции Draw и Move уже созданы в другом классе.
Но как видно из фрагмента кода Trap не является наследником другого класса. И есть 2 варианта: первый ваш, что это якобы для будущих наследников класса Trap, и второй: то что trap является наследником класса в котором определены функции Draw и Move(так как это лишь фрагмент кода показали обозначив их как виртуальные, вместо того чтобы написать базовый класс, либо тупо забыли это сделать ). Просто от этого зависит что мне дальше делать. Или мутить отрисовку объектов уже через созданный Draw, или забить на наследование и просто заново в Trap описать все эти методы по-своему.
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
24.05.2017, 19:14 4
Цитата Сообщение от Jim_Hunter Посмотреть сообщение
вместо того чтобы написать базовый класс, либо тупо забыли это сделать
Как бы он и будет базовым классом... Пусть и с определёнными, а не чисто виртуальными функциями, но это не важно. Если наследников создавать для этого класса в обозримом будущем не собираешься то да, "virtual" можно поубирать, от этого чуть производительность повысится.

Добавлено через 4 минуты
Если же наследники будут, то для
C++
1
class Trap1 : public Trap
можешь вызывать у наследников его реализации вот так:

C++
1
2
3
4
5
6
void Trap1::Draw(HDC dc)
{
   // код
   Trap::Draw(dc);  // вызов отрисовки базового класса
   // код
}
0
24.05.2017, 19:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2017, 19:14
Помогаю со студенческими работами здесь

Полиморфизм, наследование
Создать абстрактный базовый класс с виртуальной функцией*— площадь. Создать производные классы:...

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

ООП Полиморфизм Наследование
У меня есть базовый класс и 2 производных от него класса... Как сделать, чтобы в программе я мог...

Виртуальное наследование и полиморфизм
Читая книгу столкнулся с такой типа такой, что полиморфизм это механизм в котором наследуются...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru