Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Parhosha
0 / 0 / 0
Регистрация: 30.10.2016
Сообщений: 8
#1

Abstract class & STL

12.11.2016, 11:29. Просмотров 821. Ответов 4

C++
1
2
3
4
5
6
7
8
9
10
11
list<CGraphicsObject*> objS;
objS.push_back(new Circle("Circle" , 1));
objS.push_back(new Square("Square" , 2));
objS.push_back(new Circle("Circle" , 3));
 
 std::list<CGraphicsObject*> mylist ;
 
  cout << "mylist contains:";
 
   for (std::list<CGraphicsObject*>::iterator it=mylist.begin(); it != mylist.end(); ++it){
    cout << ' ' << *it;
Добрый день, могли бы мне подсказать. Есть абстрактный класс CGraphicsObject от которого наследуются два класса квадрат и круг, нужно поместить их в лист, а после получить объекты и иметь возможность вызывать их методы.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2016, 11:29
Ответы с готовыми решениями:

Error C2259: cannot instantiate abstract class
Всем добрый день. Создаю класс-наследник, переопределяю все виртуальные...

public class && static class
Вообщем у меня небольшая связка, которую я хотел бы использовать в программе...

функторы && STL
Знакомлюсь с функторами. Помогите реализовать поиск минимального числа в...

class && constructor
День добрый! Создаю кое-что для кое-чего, но внезапно столкнулся с такой...

STL & classes
Товарищи, выручайте. Ситуация следующая. Имеется два *.h файла, в каждом файле...

4
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
12.11.2016, 12:16 #2
А зачем mylist, ты же objS заполнял?
Цитата Сообщение от Parhosha Посмотреть сообщение
а после получить объекты и иметь возможность вызывать их методы
Если методы виртуальные, то вызывай напрямую через указатель на предка, а если нет, то надо привести тип. Можешь сделать функцию для идентификации.
0
Parhosha
0 / 0 / 0
Регистрация: 30.10.2016
Сообщений: 8
12.11.2016, 12:31  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
list<CGraphicsObject*> objS;
objS.push_back(new Circle("Circle", 1));
objS.push_back(new Square("Square", 2));
objS.push_back(new Circle("Circle", 3));
 
 
cout << "list contains:";
 
for (std::list<CGraphicsObject*>::iterator it = objS.begin(); it != objS.end(); ++it)
{
    cout << ' ' << it->area();
}
Ошибка : 'std::list<CGraphicsObject*>::iterator' has no member named 'area'
____________________________________________________________________________________

Да, функции виртуальные, преопределены в наследниках, но не получается их вызывать
C++
1
2
3
4
5
6
class CGraphicsObject
{
public:
    virtual double area() const = 0;
    virtual void show(){}
};
0
DrOffset
8013 / 4650 / 1131
Регистрация: 30.01.2014
Сообщений: 7,555
12.11.2016, 13:09 #4
Лучший ответ Сообщение было отмечено Parhosha как решение

Решение

Цитата Сообщение от Parhosha Посмотреть сообщение
cout << ' ' << it->area();
C++
1
cout << ' ' << (*it)->area();
Итератор имеет самантику указателя. Поэтому в твоем контексте получается "указатель на указатель". Дальше, думаю, выводы сможешь сделать сам.
1
Parhosha
0 / 0 / 0
Регистрация: 30.10.2016
Сообщений: 8
12.11.2016, 13:10  [ТС] #5
Очень вам благодарен
0
12.11.2016, 13:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2016, 13:10

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i =...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef...

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;)...


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

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

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