crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

mezmay
  опции профиля:
сообщение 19.4.2011, 13:16
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Помогаю одному студенту выполнить лабу.
Там требуется создать простой класс, некотрые действия над ним простые... Но потом в задании сказано - перенести конструкторы и деструкторы в секцию private и решить возникшие после этого проблемы с помощью статического фабричного метода (!)
Ну, с консрукторами все понятно - создаем статические методы, так называемые именованные конструкторы.
Вместо деструктора тоже вроде ясно - public метод destroy(), делающий delete this.

Но как создавать объекты такого класса - не понятно, компилятор ругается

class MyClass
{
private:
    MyClass();
    ~MyClass();

public:
    static MyClass createInstance() {return MyClass();};
    void destroy() {delete this;};

...
...
...
}

int main(int argc, char* argv[])
{
    MyClass my = MyClass::createInstance(); // нельзя, ошибка error C2248: 'MyClass::~MyClass' : cannot  access rivate member declared in class 'MyClass'
    MyClass *pMy = &MyClass::createInstance(); //нельзя, тоже самое

    return 0;
}


Сообщение отредактировал mezmay - 19.4.2011, 13:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 21.4.2011, 8:14
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mezmay @ 19.4.2011, 16:16) *
перенести конструкторы и деструкторы в секцию private и решить возникшие после этого проблемы с помощью статического фабричного метода (!)
Это называют - фабрика.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 19.2.2025, 2:21