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

Vector в С++(2) - C++

Восстановить пароль Регистрация
 
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
24.07.2013, 20:21     Vector в С++(2) #1
у меня есть абстрактный класс Фигура (базовый), от него наследуются классы Circle, Rectangle , я создал вектор типа указатель на Фигура и положил туда вперемешку объекты классов Окружность и Прямоугольник, а теперь мне нужно вызвать методы каждого объекта вектора, мне подсказали, как написать этот метод, но не пойму почему надо так (выделено желтым)
базовый класс:
C++
1
2
3
4
5
6
7
8
9
class Figure
{
public:
    Figure(void);
    ~Figure(void);
    virtual float GetSquare() = 0;
    virtual float GetPerimetre() = 0;
    virtual void GetInformation() = 0;
};
класс картина:
C++
1
2
3
4
5
6
7
8
9
10
class Picture
{
    vector<Figure*> Mass;
public:
    Picture();
    ~Picture();
    void AddMassRectangle();
    void AddMassCircle();
    void GetInformation();
};
классы прямоугольник и окружность:
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
class Rectangle: public Figure
{
    int Radius;
    float Per;
    float Squar;
    int X, Y;
    int Width;
    int Length;
public:
    Rectangle(int, int, int, int);
    ~Rectangle(void);
    void GetInformation();
    float GetSquare();
    float GetPerimetre();
};
 
class Circle: public Figure
{
    int Radius;
    float Per;
    float Squar;
    int x;
    int y;
public:
    Circle(int, int, int);
    ~Circle(void);
    void GetInformation();
    float GetSquare();
    float GetPerimetre();
};
Picture.cpp
C++
1
2
3
4
5
6
7
[COLOR="Yellow"]void Picture::GetInformation()
{
    for (auto it = Mass.begin(); it != Mass.end(); it++)
    {
        (*it)->GetInformation();
    }[/COLOR]
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
24.07.2013, 21:47     Vector в С++(2) #2
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
но не пойму почему надо так
Что именно не понятно?
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
24.07.2013, 22:03  [ТС]     Vector в С++(2) #3
почему надо писать (*it)->GetInformation(); а не it->GetInformation(); и что значит (*it)?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
24.07.2013, 22:09     Vector в С++(2) #4
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
vector<Figure*> Mass;
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
почему надо писать (*it)->GetInformation(); а не it->GetInformation(); и что значит (*it)?
потому, что вектор содержит указатели. что бы обратиться к члену класса первым делом нужно разыменовать итератор (*it) - это даст Figure*. теперь нужно разыменовать этот указатель (->). и таким образом можно обратиться к члену класса
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
24.07.2013, 22:10     Vector в С++(2) #5
В векторе содержаться указатели.
Так что разыменовывая итератор мы получаем указатель и потом уже к указателю в векторе применяется селектор
->
Yandex
Объявления
24.07.2013, 22:10     Vector в С++(2)
Ответ Создать тему
Опции темы

Текущее время: 12:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru