forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Vector и объект класса (http://forum.boolean.name/showthread.php?t=16648)

Spy4433 14.04.2012 17:57

Vector и объект класса
 
допустим нужно организовать список объектов класса

Class C_a
{
float nx;
};

C_a a;

vector<C_a>list_a;

list_a.pushback(a); //1
list_a.pushback(a);//2
получается что вектор копирует объект в себя тк при обращении к 1 или 2 значения nx у каждого свои )

как вообще правильно сделать это дело ?


в с++ Нуб )

Mr_F_ 14.04.2012 19:59

Ответ: Vector и объект класса
 
ты забыл написать, какой результат ты хочешь получить.
чтобы были одинаковые объекты в list_a[0] и list_a[1]?
ну суй в вектор не объект, а указатель на объект или идентификатор объекта в другом массиве.

HolyDel 14.04.2012 20:58

Ответ: Vector и объект класса
 
Код:

vector<C_a*>list_a;

list_a.pushback(&a); //1
list_a.pushback(&a);//2

только это какая-то лажа. какой результат хочешь получить?

Spy4433 14.04.2012 21:39

Ответ: Vector и объект класса
 
список объектов класса к которым можно было бы обращатся

как бы аналог блиц type

HolyDel 14.04.2012 22:24

Ответ: Vector и объект класса
 
работать с указателями объектов

Spy4433 15.04.2012 11:18

Ответ: Vector и объект класса
 
Код:

#include <iostream>
#include <vector>

using namespace std;

class Tman
{
public:
    Tman(int temp_x);
    ~Tman();
    int get_x();
    void set_x(int temp_x);
private:
    int x;
};


Tman::Tman(int temp_x)
{
    x=temp_x;
};

Tman::~Tman()
{
  //что писать в деструкторе
};

int Tman::get_x()
{
  return x;
};

void Tman::set_x(int temp_x)
{
  x=temp_x;
};




vector<Tman>list_mans;

int main()
{


list_mans.push_back(Tman(2));
list_mans.push_back(Tman(3));
list_mans.push_back(Tman(6));

for(int i=0;i<list_mans.size();i++)
{
    cout<<list_mans[i].get_x()<<"\n";
}

list_mans[2].set_x(88);

for(int i=list_mans.size()-1;i>=0;i--)
{
    cout<<list_mans[i].get_x()<<"\n";
}


    return 0;
}


хотелось бы узнать адекватно это или нет?
и если нет то как адекватнее, лучше с коротким примером и немного объяснения :)

impersonalis 15.04.2012 14:56

Ответ: Vector и объект класса
 
Лафоре Р. Объектно-ориентированное программирование в С++. 4-е издание — СПб.: Питер, 2005. — 924 с.

upd: кроме шуток.

pozitiffcat 16.04.2012 14:37

Ответ: Vector и объект класса
 
Цитата:

Сообщение от Mr_F_ (Сообщение 225494)
ты забыл написать, какой результат ты хочешь получить.
чтобы были одинаковые объекты в list_a[0] и list_a[1]?
ну суй в вектор не объект, а указатель на объект или идентификатор объекта в другом массиве.

инициировать с new все, что попадает в вектор, кроме строк! иначе они со стека поудаляются нахрен, и в векторе будут лежать невалидные объекты.

impersonalis 16.04.2012 16:50

Ответ: Vector и объект класса
 
Цитата:

Сообщение от pozitiffcat (Сообщение 225633)
инициировать с new все, что попадает в вектор, кроме строк! иначе они со стека поудаляются нахрен, и в векторе будут лежать невалидные объекты.

три раза перечитал - не понял. Перескажи другими словами, пожалуйста.

Mr_F_ 16.04.2012 17:10

Ответ: Vector и объект класса
 
я думаю, он имел ввиду, что не стоит забывать, что объекты, указатели на которые ты кидаешь в вектор, надо создавать через new, а не объявляеть на стеке где попало, иначе они удалятся после выхода из контекста, а указатели сделаются невалидными)
впрочем, тут необязательно именно через new. просто надо следить, чтобы время жизни объектов совпадало с временем жизни контейнера.

impersonalis 16.04.2012 18:08

Ответ: Vector и объект класса
 
Стоит при этом отметить, что память под строковые литералы (const char*) выделяется статически

pozitiffcat 17.04.2012 08:16

Ответ: Vector и объект класса
 
Цитата:

Сообщение от Mr_F_ (Сообщение 225674)
я думаю, он имел ввиду, что не стоит забывать, что объекты, указатели на которые ты кидаешь в вектор, надо создавать через new, а не объявляеть на стеке где попало, иначе они удалятся после выхода из контекста, а указатели сделаются невалидными)
впрочем, тут необязательно именно через new. просто надо следить, чтобы время жизни объектов совпадало с временем жизни контейнера.

Да. :) все верно


Часовой пояс GMT +4, время: 02:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot