Дизайн класса C++ - легко init / создает объекты

Используя C++ я создал Класс, который имеет много функций метода set, а также различных функций, которые могут быть вызваны подряд во время времени выполнения. Таким образом, я заканчиваю с кодом, который похож:

A* a = new A();
a->setA();
a->setB();
a->setC();
...
a->doA();
a->doB();

Не, что это плохо, но мне не нравится вводить "a->" много раз.
Таким образом, я переписал свои определения классов для сходства с:

class A{
public:
    A();
    virtual ~A();

    A* setA();
    A* setB();
    A* setC();
    A* doA();
    A* doB();

    // other functions

private:

    // vars
};

Таким образом я мог init мой класс как: (метод 1)

A* a = new A();
a->setA()->setB()->setC();
...
a->doA()->doB();

(который я предпочитаю, поскольку легче записать),
Для предоставления более точной реализации этого, Вы видите мой Класс C++ Sprite SDL, который я записал по http://ken-soft.com/?p=234

Все, кажется, работает просто великолепно. Однако я интересовался бы любой обратной связью к этому подходу. Я заметил Одну проблему. Если я init Мой класс как: (метод 2)

A a = A();
a.setA()->setB()->setC();
...
a.doA()->doB();

Затем у меня есть различные проблемы памяти, и иногда вещи не работают, как они должны (Вы видеть это путем изменения, как я init весь Sprite возражаю в main.cpp моей Демонстрации Sprite).
Это нормально? Или поведение должно быть тем же?
Редактирование методы set должно, прежде всего, сделать мою жизнь легче в инициализации. Моим основным вопросом является способ, которым метод 1 и метод 2 ведут себя отличающиеся для меня?

Править: Вот метод считывания в качестве примера и метод set:

Sprite* Sprite::setSpeed(int i) {
    speed = i;
    return this;
}

int Sprite::getSpeed() {
    return speed;
}

6
задан David Thornley 4 August 2010 в 14:57
поделиться