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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
#1

Векторы (в классах) - C++

14.10.2011, 12:12. Просмотров 1160. Ответов 22
Метки нет (Все метки)

Всем здравствуйте.
Никак не разберусь с векторами, а именно:
Как заменить динамический массив на векторы?

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
class Dog
{
public:
        
    // int SetAge(int age) { _age = age; }
    // пока что нужно именно таким методом
    int Age;
};
 
void main()
{
    Dog* sharik = new Dog[4];
    Dog* bobik;
    bobik->Age = 3; // бобику 3 года
 
    for(int i = 0; i<4; ++i)
    {
         sharik[i].Age = bob.Age; // Всем Шарикам столько же лет 
         cout << "Sharik number: " << i << " is: " << sharik[i].Age << " year old\n";
    }
    
    delete []sharik, bobik;
    cin.get();
}
Вывод:
Sharik number: 0 is: 3 year old
Sharik number: 1 is: 3 year old
Sharik number: 2 is: 3 year old
Sharik number: 3 is: 3 year old

Добавлено через 3 часа 10 минут
Никто не знает?)
Dog* sharik = new Dog[4];
как это объявить векторным методом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 12:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Векторы (в классах) (C++):

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе - C++
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих имен встречаются во всех классах, какие...

Функции в классах С++ - C++
Здравствуйте. Уже который час бьюсь над решением проблемы, связанной с классами в C++. Надо написать программу, которая бы складывала...

наследование в классах - C++
всем доброго времени суток ! нужно создать виртуальную функцию для заполнения класса данными и печать данных на экран и переопределить...

Ошибка в классах - C++
Добрый день! Мне необходимо разбить 1 класс на 2: базовый и производный! Я вроде сделал, но вылезает ошибка, что нехватает фигурной...

Fstream в классах - C++
Проблема заключается в том, что я не могу использовать fsream в классе, ибо выдаёт ошибку. Код и текст ошибки ниже. Помогите пожалуйста (мб...

Ошибки в классах - C++
Доброго времени суток уважаемые форумчане! В двух словах: есть класс поезд с некоторыми полями и есть класс станция, который содержит...

22
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,464
Записей в блоге: 1
14.10.2011, 12:15 #2
Код
vector<Dog*>MyDogVector;
MyDogVector.push_back(new Dog());
MyDogVector[MyDogVector.size()-1].Age = 3;
1
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.10.2011, 12:36  [ТС] #3
oxotnik, Спасибо. Но появилась другая проблема. Я не могу заполнить элементы массива.
C++
1
2
for(int i=0; i<4; ++i)
    MyDogVector.at(i)->Age = 3; // программа крешится
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
14.10.2011, 12:44 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main()
{
    vector<Dog> sharik(4);
    Dog bobik;
    bobik.Age = 3; // бобику 3 года
 
    for(int i = 0; i<4; ++i)
    {
         sharik[i].Age = bobik.Age; // Всем Шарикам столько же лет 
         cout << "Sharik number: " << i << " is: " << sharik[i].Age << " year old\n";
    }
    cin.get();
}
1
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 12:47 #5
res, а как ты до этого вектор описал? Ты в него что-то положил, перед тем как пытаться к i-му элементу обратится?
Вот пример (шарики в векторе из объектов класса, бобики - в векторе из указателей на объекты)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    vector<Dog> sharik;
    for(int i = 0; i<4; ++i)
    {
        sharik.push_back(Dog());
        sharik.at(i).Age=3;
         cout << "Sharik number: " << i << " is: " << sharik[i].Age << " year old\n";
    }
 
    vector<Dog*> bobik;
    for(int i = 0; i<4; ++i)
    {
        bobik.push_back(new Dog());
        bobik.at(i)->Age=3;
         cout << "Bobik number: " << i << " is: " << bobik[i]->Age << " year old\n";
    }
ну или вектор надо сразу создавать нужного размера, как в предыдущем посте
1
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
14.10.2011, 12:48 #6
Цитата Сообщение от res Посмотреть сообщение
delete []sharik, bobik;
Это неверно. delete следует вызывать отдельно для каждого из указателей:
C++
1
2
delete[] sharik;
delete bobik;
1
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.10.2011, 13:08  [ТС] #7
rangerx, "delete следует вызывать отдельно для каждого из указателей:"
Спасибо, это из-за того что первый delete - массив? Или для всех надо вызывать отдельно?

aeshes, Описание было постом выше, модера.


gooseim,

Не по теме:

Вот он, вот он! Вот он, вектор мой. Ребята вектор!!


Спасибо, ты все сделал так, как мне нужно было)
0
aeshes
14.10.2011, 13:28
  #8

Не по теме:

res, имела в виду, сделал ли ты четыре раза push_back() для вектора, перед тем как пытаться обратится к его i-му элементу? Или только один раз?

0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
14.10.2011, 13:34 #9
res, для всех отдельно. Компилятор, кстати говоря, должен был выдать предупреждение на такую запись.
0
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.10.2011, 13:53  [ТС] #10
rangerx, Спасибо. Viusal Studio 9 молчит.

aeshes, Не сделал, теперь понял в чём ошибка.

Теперь ещё один вопрос, как объявить вектор типа с конструктором?

C++
1
2
3
4
5
6
7
8
9
10
11
class Dog
{
public:
    Dog(float weight)  { weight = 1.5f; }
    ~Dog() {};
};
 
void main()
{
    vector <Dog(1.4f)> sharik(4); // ошибка
}
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
14.10.2011, 13:57 #11
C++
1
vector <Dog> sharik(4, Dog(1.4f));
1
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,464
Записей в блоге: 1
14.10.2011, 13:58 #12
Цитата Сообщение от res Посмотреть сообщение
как объявить вектор типа с конструктором?
зачем?
Код
vector <Dog*>MyDogVector;
MyDogVector.push_back(new Dog(4));
1
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.10.2011, 14:05  [ТС] #13
gooseim,
Спасибо, я уже так пробовал, не получалось, видимо что то не верно сделал.
Работает.

oxotnik,
Все загвоздки хочу узнать, естественно это только примеры.
Твой метод отличается тем, что если выйдет за грань массива, программа не крешнит?
0
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,464
Записей в блоге: 1
14.10.2011, 14:07 #14
Цитата Сообщение от res Посмотреть сообщение
Твой метод отличаются тем, что если выйдет за грань массива, программа не крешнит?
за какую грань массива? вектор это "бесконечный" массив, push_back добавляет ему еще один элемент в конце. (на самом деле больше, но это внутренняя реализация)
0
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.10.2011, 14:20  [ТС] #15
Цитата Сообщение от oxotnik Посмотреть сообщение
за какую грань массива? вектор это "бесконечный" массив, push_back добавляет ему еще один элемент в конце. (на самом деле больше, но это внутренняя реализация)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Dog
{
public:
    Dog(float weight)  { weight = 1.5f; }
    ~Dog() {};
    int GetWight() const { return _weight; } 
    int Age;
private:
    int _weight;
};
 
void main()
{
    vector <Dog> pDog(4, Dog(1.3f));
    for(int i=0; i<5; ++i) // выходим за предел
    {
        pDog.at(i).Age = 14; // в пятом повторе креш
        cout << pDog.at(i).Age << endl;
    }
    cin.get();
}
такие дела
0
14.10.2011, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 14:20
Привет! Вот еще темы с ответами:

Исключения в классах - C++
Здравствуйте. Какими средствами правильней всего сделать обработку исключений в классах? /* например, эта функция */ int...

Protected в классах - C++
#include &lt;iostream&gt; using namespace std; class TPoint{ protected: int x,y; TPoint *t; ...

Конструкторы в классах - C++
Здравствуйте уважаемые форумчане! Прошу Вас помочь мне уяснить работу конструкторов в классах! А точнее что нужно сделать что бы...

Перечисления в классах - C++
Не могу понять почему в классах работают перечисления? Я не могу в классе обьявить константу, но я могу ее за менить перечислением вроде...


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

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

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