Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сериализация 
:(
    Опции темы
knut
Дата 11.3.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Добрый день Всем.
Вот столкнулся с проблемой сериализацией. 
Есть два класса cA и cB.У cA есть два метод some_method_1() и some_method_2() 
в методе some_method_1() создается обект cB a в метод some_method_2() надо пеедать обект
созданный в методе some_method_1(). 
Код



class cB
{}; 
class cA
{
public:
void some_method_1() ;
void some_method_2() ;

};
void cA::some_method_1() 
{
cB *pObj = new cB;
//do with object pObject something.
}

Собственно вопрос. как сериализоварь обект pObj ?.
или может можно обойти сериализацию и зделать как то подругому?A
P.S без boos a 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Xenon
Дата 11.3.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



По-моему если класс состоит только из POD элементов, то можно просто бинарно писать:
Код

std::fstream file("...",std::ios::out | std::ios::binary);
file.write(reinterpret_cast<char*>(pObj),sizeof(cB));


Это сообщение отредактировал(а) Xenon - 11.3.2007, 17:34


--------------------
user posted image  
PM MAIL   Вверх
knut
Дата 11.3.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Xenon, не понял куда бинарно писать? нме только надо передат в метод void some_method_2() ; обект зоданный в методе void some_method_1() ;


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Fazil6
Дата 11.3.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(knut @  11.3.2007,  15:46 Найти цитируемый пост)
Собственно вопрос. как сериализоварь обект pObj ?.

сериализация - это по твоему что?
PM MAIL   Вверх
Xenon
Дата 11.3.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



knut, Я так понял под сериализацией ты имеешь ввиду запись в файл.
Тогда какие проблемы?.. Передавай указатель.
Код

class cB
{}; 
class cA
{
public:
void some_method_1();
void some_method_2(cB* obj) ;

};
void cA::some_method_1() 
{
    cB *pObj = new cB;
    some_method_2(pObj);
}
void cA::some_method_2(cB* obj)
{
    delete obj;
}

Или я чего-то не понимаю в вопросе


--------------------
user posted image  
PM MAIL   Вверх
knut
Дата 11.3.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Цитата

сериализация - это по твоему что? 

соxронить обект.


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Xenon
Дата 11.3.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



knut, передать объект по указателю/ссылке/значению равно, в твоем случае, сериализации(сохранению)? Э?


--------------------
user posted image  
PM MAIL   Вверх
knut
Дата 11.3.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Xenon,  в твое примере в методе some_method_2(cB* obj)  я не получу тот же обект которы был создан в some_method_1(). 

 
Код

class cB
{}; 
class cA
{
public:
void some_method_1();
void some_method_2(cB* obj) ;

};
void cA::some_method_1() 
{
    cB *pObj = new cB;
    some_method_2(pObj);
}
void cA::some_method_2(cB* obj)
{
    delete obj;
}


Добавлено @ 18:36 
в методе  some_method_1() соьдается и инизализуется обект *pObj  так вот в метод  some_method_2() надо передать уже этот инизализированный обект *pObj . 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
vinter
Дата 11.3.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

cB * cA::some_method_1() 
{
    cB *pObj = new cB;
    some_method_2(pObj);
    return pObj 
}
void cA::some_method_2(cB* obj)
{
    delete obj;

}
...........
cA obj;
obj.some_method_2(obj.some_method_1());



--------------------
Мой блог
PM MAIL WWW   Вверх
likehood
Дата 11.3.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



vinter, только ты забыл закоментить вызов второго метода в теле some_method_1, иначе some_method_1 будет возвращать уже удаленный объект.

knut, а чем тебе не нравиться вариант, предложенный Xenon'ом? Почему ты решил, что в some_method_2 не передается тот же объект, что был создан в some_method_1? И почему ты решил, что тебе нужна сериализация (кстати, что ты под ней понимаешь?)
PM MAIL   Вверх
knut
Дата 11.3.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



vinter, 
так не прокатет в смысле в some_method_2(cB* obj) надо передать полно инизализированный обект  pObj 
(т.е some_method_1() вызовается не зависимао от вызова some_method_2(cB* obj),иx вызовы не как не должны быть связонны.) выполняется some_method_1() инизализует pObj .вот когда уже вузовается some_method_2(cB* obj) ему уже 
должно быть переданно иницалисованный  *pObj ;
P.S some_method_1() и some_method_2(cB* obj) они как load и save.

Добавлено @ 19:00 
Цитата

knut, а чем тебе не нравиться вариант, предложенный Xenon'ом? Почему ты решил, что в some_method_2 не передается тот же объект, что был создан в some_method_1

см пост 11


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Xenon
Дата 11.3.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



knut, Сделай pObj переменной-членом класса cA
Код

class cB
{}; 
class cA
{
private:
    cB* pObj;
public:
    void some_method_1();
    void some_method_2();
    cA():pObj(NULL){}

};
void cA::some_method_1() 
{
    pObj = new cB;
}
void cA::some_method_2()
{
    if (pObj) /*...Делаем что-нибудь..*/;
    else pObj = new cB;
}



--------------------
user posted image  
PM MAIL   Вверх
Dark Elf
Дата 11.3.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 26.12.2003
Где: Брисбен

Репутация: 9
Всего: 10





--------------------
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
Xenon
Дата 11.3.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Dark Elf, 
Цитата(knut @  11.3.2007,  16:46 Найти цитируемый пост)
P.S без boos a 

При чем в итоге непонятно чего хочет человек smile


--------------------
user posted image  
PM MAIL   Вверх
Любитель
Дата 11.3.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Только пофиксить это надо. От многоразового вызова some_method_1 - утечка памяти пойдёт (просто проверку поставить).


--------------------
PM MAIL ICQ Skype   Вверх
Xenon
Дата 11.3.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Любитель, ну да smile

Код

class cB
{}; 
class cA
{
private:
    cB* pObj;
public:
    void some_method_1();
    void some_method_2();
    cA():pObj(NULL){}

};
void cA::some_method_1() 
{
    if (!pObj) pObj = new cB;
}
void cA::some_method_2()
{
    if (pObj) /*...Делаем что-нибудь..*/;
    else pObj = new cB;

}



--------------------
user posted image  
PM MAIL   Вверх
vinter
Дата 11.3.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

cB * cA::some_method_1() 
{
    cB *pObj = new cB;
    return pObj 
}
void cA::some_method_2(cB* obj)
{
    delete obj;

}
...........
cA obj;
cB *objB = obj.some_method_1()
..............................
obj.some_method_2(objB);



--------------------
Мой блог
PM MAIL WWW   Вверх
knut
Дата 11.3.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Сделал я так (наxимичил)
Код

class cB
{}; 
class cA
{
private:
    cB* pObj;
public:
    void some_method_1();
    void some_method_2();
    Get_Object(){return  pObj;}
    cA(){cA *pObj = new cA;}
};
void cA::some_method_1() 
{
    pObj = new cB;
}
void cA::some_method_2(cB*object)
{
   object = Get_Object();  
}

как такой вариант?

Добавлено @ 20:14 
только без этого[quote]
Код

void cA::some_method_1() 
{
    //pObj = new cB;// здесь не кокого new
}




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
vinter
Дата 11.3.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



как тебе такой вариант smile 
Код

void cA::some_method_2(cB &*object)
{
   object = pObj;  

}


Добавлено @ 20:18 
твой код работать не будет, у тебя типы разные
Код

cA *pObj = new cA;

и
Код

cB*object



--------------------
Мой блог
PM MAIL WWW   Вверх
Fazil6
Дата 11.3.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

как такой вариант?

плохо все. 
Куча непонятно чего непонятно зачем. Такое впечатление, что ты сам плохо представляешь чего хочешь добиться
PM MAIL   Вверх
Xenon
Дата 11.3.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



knut, ты объясни лаконично то, чего ты хочешь в результате получить. Мы не кусаемся - поможем. Просто до меня так до сих пор д оконца и не дошло чего ты хочешь. Ты опиши проблему абстрактно

Это сообщение отредактировал(а) Xenon - 11.3.2007, 21:16


--------------------
user posted image  
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5331 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.