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

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

Войти
Регистрация
Восстановить пароль
 
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
#1

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

24.07.2013, 20:21. Просмотров 268. Ответов 4
Метки нет (Все метки)

у меня есть абстрактный класс Фигура (базовый), от него наследуются классы 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]
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2013, 20:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Vector в С++(2) (C++):

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

Ошибка [Linker error] undefined reference to `Vector::Vector(int)' - C++
Добрый день. Делал по методички, и почему-то валятся ошибки... файл lab9_main.cpp #include &lt;iostream&gt; #include &quot;Vector.h&quot; int...

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...

Указатель на объект вектор в векторе vector < vector<int>* >* - C++
Дело касается вот чего, есть такая вот незатейлевая вещь. #include &lt;vector&gt; #include &lt;iostream&gt; int main( ) { using...

Как корректно скопировать vector в vector внутри класса - C++
Есть класс принимающий в конструкторе vector: class test { test(std::vector&lt;std::string&gt; codeList); ~test(); ...

4
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 1
24.07.2013, 21:47 #2
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
но не пойму почему надо так
Что именно не понятно?
0
Казаков Игорь
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 34
24.07.2013, 22:03  [ТС] #3
почему надо писать (*it)->GetInformation(); а не it->GetInformation(); и что значит (*it)?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
24.07.2013, 22:09 #4
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
vector<Figure*> Mass;
Цитата Сообщение от Казаков Игорь Посмотреть сообщение
почему надо писать (*it)->GetInformation(); а не it->GetInformation(); и что значит (*it)?
потому, что вектор содержит указатели. что бы обратиться к члену класса первым делом нужно разыменовать итератор (*it) - это даст Figure*. теперь нужно разыменовать этот указатель (->). и таким образом можно обратиться к члену класса
1
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 1
24.07.2013, 22:10 #5
В векторе содержаться указатели.
Так что разыменовывая итератор мы получаем указатель и потом уже к указателю в векторе применяется селектор
->
1
24.07.2013, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 22:10
Привет! Вот еще темы с ответами:

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>> - C++
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа, разделенные пробелами и запятыми: 1, 2, 3,...

Struct / Vector / Expression: vector subscript out of range - C++
Добрый вечер. Имеется структура: struct Contact { public: string name; vector&lt;string&gt; phoneNumber; };

Записать vector<vector<wchar_t>> в текстовый файл - C++
Подскажите пожалуйста, как записать vector&lt;vector&lt;wchar_t&gt;&gt; в файл. Файл необходимо открывать через _wfopen. Пробую так, не получается....

При include<vector> не включает и не видит vector - C++
Не видит vector: //--ClassNeuron.h #ifndef NEURON_H #define NEURON_H #include &lt;cstdlib&gt; #include...


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

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

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