Re[7]: Задача для действительно знатоков С++
От: MaximE Великобритания  
Дата: 15.06.03 10:47
Оценка: :)
Здравствуйте, rembo, Вы писали:

R>ia ochen ogranichen vo vremeni-tak ia u Suttera nichego podhodiachego ne vizhu-esli mozesh pomogi,napishi code


Решение приведено выше. Что ты еще хочешь? Или ты не знаешь как объяснить преподу, почему эта реализация предоставляет strong exception safety?
Re[7]: Задача для действительно знатоков С++
От: UgN  
Дата: 15.06.03 10:49
Оценка: +1
Здравствуйте, rembo, Вы писали:

R>ia ochen ogranichen vo vremeni-tak ia u Suttera nichego podhodiachego ne vizhu-esli mozesh pomogi,napishi code


Тебе уже ставили на вид здесь
Автор: Павел Кузнецов
Дата: 15.06.03
, что такое поведение не приветствуется.

Что за подход: сделай за меня мое задание и пошевеливайся!

Тебе уже показали куда рыть -- иди и рой...

Почему кто-то должен за тебя делать твое задание?

Сильно надо -- отправляйся в форум "работа".
Задача для действительно знатоков С++
От: rembo  
Дата: 15.06.03 09:01
Оценка:
Напишите класс Person со следушими условиами.
1. Он должен содержат стринговие поля Имя и Емэйл
2. Уже сконструирований объект при изменении (копировать сонструктор и тд.) должен либо менятся полностью-и Имя я Емэйл -либо , при исключенях-типа плохой аллокации памяти должен делать роллбак к своим первоначальным значениям

при кодировании можно пользоваться STL
Re: Задача для действительно знатоков С++
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 15.06.03 09:21
Оценка:
Здравствуйте, rembo, Вы писали:

Очень сложная задача

R>Напишите класс Person со следушими условиами.

R>1. Он должен содержат стринговие поля Имя и Емэйл
R>2. Уже сконструирований объект при изменении (копировать сонструктор и тд.) должен либо менятся полностью-и Имя я Емэйл -либо , при исключенях-типа плохой аллокации памяти должен делать роллбак к своим первоначальным значениям

Это называется поддержка транзакционных изменений. Решается вынесением данных Person в отдельный объект (типа PersonData). Сам Person хранит указатель на текущие данные и предыдущие данные. У Persion два метода: Commit и Rollback будут точно, а вот начало транзакции можно указывать как явно (через метод StartTransaction) так и не явно при изменении любого свойства Person.

Само собой разумеется прямого доступа к полям Person не будет — все обращения должны идти через методы Person.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Задача для действительно знатоков С++
От: MaximE Великобритания  
Дата: 15.06.03 09:21
Оценка:
Здравствуйте, rembo, Вы писали:

R>Напишите класс Person со следушими условиами.

R>1. Он должен содержат стринговие поля Имя и Емэйл
R>2. Уже сконструирований объект при изменении (копировать сонструктор и тд.) должен либо менятся полностью-и Имя я Емэйл -либо , при исключенях-типа плохой аллокации памяти должен делать роллбак к своим первоначальным значениям

R>при кодировании можно пользоваться STL


Задача давно решена. Читай Саттера. http://www.gotw.ca/gotw/index.htm статьи Exception-Safe Class Design.
Re: [moderator] От модератора форума C/C++
От: Павел Кузнецов  
Дата: 15.06.03 09:23
Оценка:
Здравствуйте, rembo, Вы писали:

r> Напишите класс Person со следушими условиами.


Уважаемый rembo (aka agrilya), это и некоторые другие Ваши сообщения являются оффтопиком для данного форума
Автор: Павел Кузнецов
Дата: 25.03.03
и/или нарушают Правила форумов RSDN.ru. В частности, поиск готовых решений к учебным заданиям или просьбы об их выполнении вместо обсуждения достоинств и недостатков своего решения являются офф-топиком. Публикация одного и того же сообщения более одного раза на форумах RSDN.ru также запрещена правилами.

P.S. На всякий случай, добавлю, что отвечать на данное сообщение в форуме также не следует. Вопросы, пожелания и замечания относительно модерирования этого и других форумов rsdn.ru — в .
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Задача для действительно знатоков С++
От: MaximE Великобритания  
Дата: 15.06.03 09:47
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, rembo, Вы писали:


КД>Очень сложная задача


R>>Напишите класс Person со следушими условиами.

R>>1. Он должен содержат стринговие поля Имя и Емэйл
R>>2. Уже сконструирований объект при изменении (копировать сонструктор и тд.) должен либо менятся полностью-и Имя я Емэйл -либо , при исключенях-типа плохой аллокации памяти должен делать роллбак к своим первоначальным значениям

КД>Это называется поддержка транзакционных изменений. Решается вынесением данных Person в отдельный объект (типа PersonData). Сам Person хранит указатель на текущие данные и предыдущие данные. У Persion два метода: Commit и Rollback будут точно, а вот начало транзакции можно указывать как явно (через метод StartTransaction) так и не явно при изменении любого свойства Person.


Не нужно Commit и Rollback. Нужно лишь реализвать функцию swap, которая гарантированно не бросает исключений.

#include <string>

class person
{
public:
    person(const std::string& name, const std::string& email)
        :    name_(name)
        ,    email_(email)
    {}

    person& operator=(const person& other)
    {
        person(other).swap(*this);
        return *this;
    }

    void swap(person& other)
    {
        name_.swap(other.name_);
        email_.swap(other.email_);
    }

private:
    std::string name_, email_;
};
Re[3]: Задача для действительно знатоков С++
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 15.06.03 09:58
Оценка:
Здравствуйте, MaximE, Вы писали:

КД>>У Persion два метода: Commit и Rollback будут точно, а вот начало транзакции можно указывать как явно (через метод StartTransaction) так и не явно при изменении любого свойства Person.


ME>Не нужно Commit и Rollback. Нужно лишь реализвать функцию swap, которая гарантированно не бросает исключений.


Да я так, посмотрел на задачу более широким взглядом

person& operator=(const person& other)
{
    person(other).swap(*this);
    return *this;
}

Толково придумано
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: Задача для действительно знатоков С++
От: rembo  
Дата: 15.06.03 10:10
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>
КД>person& operator=(const person& other)
КД>{
КД>    person(other).swap(*this);
КД>    return *this;
КД>}
КД>

КД>Толково придумано

net,net vse delo imenno v tom chto etu zadachu nado reshit dlia sluchaia kogda iskluchenia est-swap ne goditsa.Ne mogli by vy raspisat vash case s PersonData

Удалено избыточное цитирование. -- ПК.
Re[5]: Задача для действительно знатоков С++
От: MaximE Великобритания  
Дата: 15.06.03 10:30
Оценка:
Здравствуйте, rembo, Вы писали:

R>net,net vse delo imenno v tom chto etu zadachu nado reshit dlia sluchaia kogda iskluchenia est-swap ne goditsa.Ne mogli by vy raspisat vash case s PersonData


Будь так добёр, почитай Саттера. Все твои вопросы отпадут.
Re[6]: Задача для действительно знатоков С++
От: rembo  
Дата: 15.06.03 10:39
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Будь так добёр, почитай Саттера. Все твои вопросы отпадут.


ia ochen ogranichen vo vremeni-tak ia u Suttera nichego podhodiachego ne vizhu-esli mozesh pomogi,napishi code

Удалено избыточное цитирование. -- ПК.
Re[6]: Задача для действительно знатоков С++
От: rembo  
Дата: 15.06.03 10:47
Оценка:
Ia prochital Suttera-sluchai kotorii on razbiraet ne podhodit suda.

Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, rembo, Вы писали:


R>>net,net vse delo imenno v tom chto etu zadachu nado reshit dlia sluchaia kogda iskluchenia est-swap ne goditsa.Ne mogli by vy raspisat vash case s PersonData


ME>Будь так добёр, почитай Саттера. Все твои вопросы отпадут.
Re[7]: Задача для действительно знатоков С++
От: MaximE Великобритания  
Дата: 15.06.03 10:50
Оценка:
Здравствуйте, rembo, Вы писали:

R>Ia prochital Suttera-sluchai kotorii on razbiraet ne podhodit suda.


http://www.gotw.ca/gotw/059.htm — это именно то, что тебе нужно.
[moderator] От модератора форума C/C++
От: Павел Кузнецов  
Дата: 15.06.03 11:56
Оценка:
Здравствуйте, rembo, Вы писали:

R>ia ochen ogranichen vo vremeni-tak ia u Suttera nichego podhodiachego ne vizhu-esli mozesh pomogi,napishi code

R>Здравствуйте, MaximE, Вы писали:

ME>>Здравствуйте, rembo, Вы писали:

R>>>net,net vse delo imenno v tom chto etu zadachu nado reshit dlia sluchaia kogda iskluchenia est-swap ne goditsa.Ne mogli by vy raspisat vash case s PersonData

ME>>Будь так добёр, почитай Саттера. Все твои вопросы отпадут.


Пожалуйста, не забывайте удалять лишнее из цитат и конвертировать транслит, например, при помощи одного из сайтов, указанных в правилах. Также, пожалуйста, не забывайте, что на RSDN.ru ответ принято писать после процитированных строк. -- ПК
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Задача для действительно знатоков С++
От: agrilya  
Дата: 15.06.03 12:32
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>Сильно надо -- отправляйся в форум "работа".


Спасибо на добром слове

Удалено избыточное цитирование. -- ПК.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.