Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Можно ли инстанцирование класса прописать в самом классе? - C++

14.04.2011, 08:27. Просмотров 1199. Ответов 14
Метки нет (Все метки)

Можно ли инстанцирование класса прописать в самом классе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2011, 08:27     Можно ли инстанцирование класса прописать в самом классе?
Посмотрите здесь:

Visual C++ MFC: 2 класса, невозможно объявить поле в классе 2 типа первого класса.
У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? C++
C++ Массив класса в классе
C++ Можно ли писать int не в самом начале?
Использование методов класса в самом классе C++
C++ Инстанцирование шаблона
C++ Инстанцирование шаблонного класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 16:40     Можно ли инстанцирование класса прописать в самом классе? #2
Только статическое поле если.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
14.04.2011, 19:31     Можно ли инстанцирование класса прописать в самом классе? #3
Класс не может содержать сам себя в качестве члена, что очевидно. Исключением, как правильно заметил Deviaphan, являются статические члены, которые объявляются отдельно. Но содержать ссылку или указатель на тот же самый класс - можно. А откуда брать объекты, на которые будут ссылаться эти указатели, уже вопрос реализации.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.04.2011, 08:16  [ТС]     Можно ли инстанцирование класса прописать в самом классе? #4
Если член, то статик здесь и так напрашивается по задаче. Но может ли статик поле в качестве типа иметь сам класс, в котором объявлено? То есть допускается ли
C++
1
2
3
4
class A
{
 static A a;
};
? Кроме того, где у меня сказано, что это должен быть член?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.04.2011, 08:37     Можно ли инстанцирование класса прописать в самом классе? #5
taras atavin, про Singleton никогда не слышали?
C++
1
2
3
4
5
6
7
8
9
10
class Singleton {
public:
  static Singleton& getInstance() {
    static Singleton instance;
    return instance;
  }
 
private:
  Singleton() {}
};
Либо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Singleton {
public:
  static Singleton* getInstance() {
    if (instance == 0)
      instance = new Singleton();
 
    return instance;
  }
 
private:
  Singleton() {}
 
  static Singleton* instance;
};
 
Singleton* Singleton::instance = 0;
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.04.2011, 08:39  [ТС]     Можно ли инстанцирование класса прописать в самом классе? #6
Кто такой синглетон?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.04.2011, 08:42     Можно ли инстанцирование класса прописать в самом классе? #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Кто такой синглетон?
Гугл знает ответ. Википедия тоже.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.04.2011, 08:43  [ТС]     Можно ли инстанцирование класса прописать в самом классе? #8
Это:
Цель
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность. Например, к описанным компонентам класса можно обращаться через интерфейс, если такая возможность поддерживается языком.
? Мне нужен минимум один объект, а не ровно один, причём, этот обязательный объект должен быть создан с применением private конструктора.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.04.2011, 08:46     Можно ли инстанцирование класса прописать в самом классе? #9
taras atavin, используйте фабричный метод:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <boost/shared_ptr.hpp>
 
class Creatable {
public:
  static boost::shared_ptr<Creatable> create() {
    return boost::shared_ptr<Creatable>(new Creatable());
  }
 
private:
  Creatable() {}
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.04.2011, 09:15     Можно ли инстанцирование класса прописать в самом классе? #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Но может ли статик поле в качестве типа иметь сам класс
Да. Не вижу препятствий.
josy
1 / 1 / 0
Регистрация: 03.05.2011
Сообщений: 4
03.05.2011, 22:22     Можно ли инстанцирование класса прописать в самом классе? #11
Смотря что вы понимаете под инстанциацией. Если создание объекта, то можно, например с помощью автоматической (локальной) переменной в функции класса, оператора new. Или статической переменной внутри функции или статического члена класса (статический член того же типа что и класс, которому он принадлежит, вполне законен). Во всех случаях не имеет значения тип доступа к конструктору, ведь конструктор будет вызван самим классом, который имеет доступ в том числе и к приватным членам.
volovzi
04.05.2011, 12:07
  #12

Не по теме:

Чем больше читаю этот форум, тем больше меня поражает taras atavin.
Мало того, что он не умеет пользоваться поиском, так он ещё и программирует без компилятора О_о .

taras atavin
04.05.2011, 12:17  [ТС]
  #13

Не по теме:

volovzi, компил у меня есть, а не пользуюсь я средой.

volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
04.05.2011, 12:23     Можно ли инстанцирование класса прописать в самом классе? #14
taras atavin, почему бы тогда не скомпилировать пару коротких строк вместо того, чтобы создавать подобные темы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 12:30     Можно ли инстанцирование класса прописать в самом классе?
Еще ссылки по теме:

C++ Как прописать шаблонную функцию внутри шаблонного класса?
Объект класса в классе C++
C++ Шаблон класса в классе
Как в классе А у объекта класса B вызвать метод класса B ? C++
Что нужно прописать в классе, чтобы никаким образом невозможно было создать от него объект? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.05.2011, 12:30  [ТС]     Можно ли инстанцирование класса прописать в самом классе? #15
Потому что и сами строки приплыли отсюда. Ну не мог я сам догадаться про поле. И что тогда тестить?
Yandex
Объявления
04.05.2011, 12:30     Можно ли инстанцирование класса прописать в самом классе?
Ответ Создать тему
Опции темы

Текущее время: 07:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru