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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
#1

ООП + полиморфизм = wtf? - C++

27.08.2011, 19:49. Просмотров 1883. Ответов 40
Метки нет (Все метки)

Есть:
Класс A - отец
Класс Б - дочерний
Класс Ц - дочерный, наследуеться от А(сестра Б)

Есть массив типа А, с названием Mass.
Он хранит в себе объекты классов Б и Ц.

в классе Б есть функция F().
в классе Ц есть функция F() (отличающаяся функционалом).

Внамание! Вопрос:
как провернуть такую часть кода - Mass[0..100].F();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 19:49     ООП + полиморфизм = wtf?
Посмотрите здесь:

ООП. Полиморфизм - C++
Мальчики, учусь на МехМате. Для сдачи зачёта по ООП необходимо написать последнюю программу: Задание: полиморфизм Указание: во всех...

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

Полиморфизм инкапсуляция и наследование(ООП) - C++
Не как не могу понять зачем нужен Полиморфизм и инкапсуляция и их определение может вы подскажите, наследования я знаю

Подкиньте практику по ООП + полиморфизм + шаблоны пожалуйста. - C++
Здравствуйте форумчане. Хотел бы попросить подбросить практику по таким темам: ООП - полифорфизм + Тэмплэты. Ну и если можно, что нибудь...

Очередное WTF ))) - C++
Вот до чего меня жизнь довела: имеем файл file.txt который содержит просто строку "Hello,World!" (с ковычками). Далее пишем такой код: ...

Расширение языка С. WTF? - C++
Hi, All! Решил на выходных заняться учебой, сессия скоро. На эти выходные наметил себе план работ - скачать задания:) Вот сижу читаю...

Спецификация файла. WTF? - C++
Здравствуйте. Что такое спецификация файла (в контексте данной задачи)? В Google ничего понятного не нашел. Заранее спасибо.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 19:53     ООП + полиморфизм = wtf? #2
В цикле, вестимо.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
27.08.2011, 19:54     ООП + полиморфизм = wtf? #3
C++
1
2
for(int i=0;i<100;i++)
     Mass[i].f();
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
27.08.2011, 19:57     ООП + полиморфизм = wtf? #4
Только выглядеть это должно бы
C++
1
Mass[i]->f();
а функция f() должна быть виртуальной.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:04  [ТС]     ООП + полиморфизм = wtf? #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
Только выглядеть это должно бы
C++
1
Mass[i]->f();
а функция f() должна быть виртуальной.

D3D_UI == клас А
D3DXButton == класс Б
setStatus == F()

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class D3D_UI
{
public:
      ....
      virtual void setStatus(LPVOID Object,int newstatus);
};
 
class D3DXButton : public D3D_UI
{
public:
  ...........
    void setStatus(LPVOID Object,int newstatus)
    {
           ....
        }
};
Error 75 error LNK2001: unresolved external symbol "public: virtual void __thiscall D3D_UI::setStatus(void *,int)" (?setStatus@D3D_UI@@UAEXPAXH@Z) C:\Users\BAIZOR\Desktop\Robotino V3 Directx 9 - копия\Robotino V2 Directx 9\Robotino V2 Directx 9.obj Robotino V2 Directx 9

Добавлено через 1 минуту
А если юзать в вызове ->


Error 23 error C2819: type 'D3D_UI' does not have an overloaded member 'operator ->' c:\users\baizor\desktop\robotino v3 directx 9 - копия\robotino v2 directx 9\Direct_All.h 710 1 Robotino V2 Directx 9
Bers
Заблокирован
27.08.2011, 20:07     ООП + полиморфизм = wtf? #6
ну он вам пишет, что объект пытается использовать функцию, у которой отсутствует тело.

C++
1
2
3
4
void setStatus(LPVOID Object,int newstatus)
{
....
}
Надо ж ещё указывать имя класса, к которому эта функция относится
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
27.08.2011, 20:09     ООП + полиморфизм = wtf? #7
Цитата Сообщение от BAIZOR Посмотреть сообщение
Error 75 error LNK2001: unresolved external symbol "public: virtual void __thiscall D3D_UI::setStatus(void *,int)" (?setStatus@D3D_UI@@UAEXPAXH@Z) C:\Users\BAIZOR\Desktop\Robotino V3 Directx 9 - копия\Robotino V2 Directx 9\Robotino V2 Directx 9.obj Robotino V2 Directx 9
Ну так определение setStatus() для класса D3D_UI есть?
Или, если класс D3D_UI абстрактный, то функцию надо объявить в этом классе как "чистую виртуальную"
C++
1
virtual void setStatus(LPVOID Object,int newstatus) = 0;
Цитата Сообщение от BAIZOR Посмотреть сообщение
А если юзать в вызове ->
А как Вы создаёте массив "детей" без указателей?

Добавлено через 1 минуту
Цитата Сообщение от Bers Посмотреть сообщение
Надо ж ещё указывать имя класса, к которому эта функция относится
Да у него эта функция для "дитя". Внутри определения класса.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2011, 20:09     ООП + полиморфизм = wtf? #8
Цитата Сообщение от BAIZOR Посмотреть сообщение
Есть:
Класс A - отец
Класс Б - дочерний
Класс Ц - дочерный, наследуеться от А(сестра Б)
Есть массив типа А, с названием Mass.
Он хранит в себе объекты классов Б и Ц.
в классе Б есть функция F().
в классе Ц есть функция F() (отличающаяся функционалом).
Внамание! Вопрос:
как провернуть такую часть кода - Mass[0..100].F();
Ну, во-первых не массив, а вектор, во-вторых не типа А, а типа А*,
ну и, в третьих, нужно воспользоваться алгоритмом for_each.
Bers
Заблокирован
27.08.2011, 20:10     ООП + полиморфизм = wtf? #9
/зы

Как вариант, можно вместо виртуальной функции заюзать паттерн "стратегия".
То бишь, использовать функторы, либо указатели на функцию, либо стратегии при помощи шаблонов.
Сыроежка
Заблокирован
27.08.2011, 20:10     ООП + полиморфизм = wtf? #10
Цитата Сообщение от BAIZOR Посмотреть сообщение
Есть:
Класс A - отец
Класс Б - дочерний
Класс Ц - дочерный, наследуеться от А(сестра Б)

Есть массив типа А, с названием Mass.
Он хранит в себе объекты классов Б и Ц.

в классе Б есть функция F().
в классе Ц есть функция F() (отличающаяся функционалом).

Внамание! Вопрос:
как провернуть такую часть кода - Mass[0..100].F();
Массив типа A не может в себе хранить объекты B и C. Это может делать только массив указателей на класс A.
grizlik78
27.08.2011, 20:12
  #11

Не по теме:

Отец, сестра... Как вы у них пол различаете?

BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:12  [ТС]     ООП + полиморфизм = wtf? #12
Цитата Сообщение от Bers Посмотреть сообщение
ну он вам пишет, что объект пытается использовать функцию, у которой отсутствует тело.

C++
1
2
3
4
void setStatus(LPVOID Object,int newstatus)
{
....
}
Надо ж ещё указывать имя класса, к которому эта функция относится

но мне нужен вызов функции из детей а не отца...
silent_1991
27.08.2011, 20:13
  #13

Не по теме:

grizlik78, нуу, у Б есть такая дырочка, а у Ц есть такой хвостик...

BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:14  [ТС]     ООП + полиморфизм = wtf? #14
Цитата Сообщение от grizlik78 Посмотреть сообщение
А как Вы создаёте массив "детей" без указателей?
UI == Mass

C++
1
2
D3DXButton Connect(...);
UI.push_back(Connect);
Добавлено через 40 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
Отец, сестра... Как вы у них пол различаете?
годы практики xDD))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 20:15     ООП + полиморфизм = wtf?
Еще ссылки по теме:

map assigment of read only data member или WTF? - C++
задача:из acm.timus.ru 1100. Таблица результатов Ограничение времени: 1.0 секунды Ограничение памяти: 16 МБ Старое программное...

WTF не работает простой код на Visual studio 2008(баг?) - C++
Взял код из википедии. ...

Полиморфизм - C++
Прочитал в Википедии что такое полиморфизм: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». ...

Полиморфизм - C++
Вот сделал прогу а ее надо было сделать полиморфизмом - кому несложно переделайте #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Полиморфизм - C++
Имеется такая задача Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на...


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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
27.08.2011, 20:15     ООП + полиморфизм = wtf? #15
Цитата Сообщение от BAIZOR Посмотреть сообщение
но мне нужен вызов функции из детей а не отца...
Так вызываете-то Вы их пока именно от отца. А даже если сделать правильно, то либо придётся для отца её определить, пусть и с пустым телом, либо сделать родительский класс абстрактным.
Yandex
Объявления
27.08.2011, 20:15     ООП + полиморфизм = wtf?
Ответ Создать тему
Опции темы

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