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

Как созадть такой экземпляр? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.04.2011, 09:10     Как созадть такой экземпляр? #1
Пусть есть класс:
C++
1
2
3
4
5
6
class A
{
 protected:
  type field;
....
};
а выше описан тип (возможно класс, или структура) type, или макрос type - синоним существующего (возможно стандартного) типа. В классе нет открытых членов, прямо, или косвенно пишуших член field. Как создать экземпляр класса A с определённым значением члена field?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 10:14     Как созадть такой экземпляр? #21
pimpl?
А ты уверен, что это должен быть один объект?
Первые три пункта без проблем, но последний решается либо пимплом, либо разделением на два класса, что по сути будет тот же pimpl.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 10:37  [ТС]     Как созадть такой экземпляр? #22
Что такое pimpl?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 10:44     Как созадть такой экземпляр? #23
http://en.wikipedia.org/wiki/Opaque_pointer
Но придётся разделить интерфейс на "для тебя" и "для всех". Т.е. с тем объектом, который у тебя сейчас, нужно будет работать не напрямую, а через два разных интерфейса.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 11:00  [ТС]     Как созадть такой экземпляр? #24
Объект должен быть константым, то есть значение ему даёться один раз при его созданиию, а изменяться он не должен вообеще. Читаться же он должен в любой части проги, иначе огн нафиг не нужен.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Handle {
private:
    struct CheshireCat;            // Not defined here
    CheshireCat *smile;            // Handle
 
public:
    Handle();                      // Constructor
    Handle(const Handle& );        // Copy constructor
    Handle& operator=(Handle);     // Copy assignment operator
    ~Handle();                     // Destructor
    // Other operations...
};
 
//CPP file:
#include "handle.h"
 
struct Handle::CheshireCat {
    // The actual implementation can be anything
    // ...
};
 
Handle::Handle()
    : smile( new CheshireCat )
{
    // do nothing
}
 
Handle::Handle(const Handle& other)
    : smile( new CheshireCat(*(other.smile)))
{
    // do nothing
}
 
Handle &Handle::operator=(Handle other) {
    std::swap( this->smile, other.smile );
    return *this;
}
 
Handle::~Handle() {
    delete smile;
}
. Как это относится к моей задаче?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 11:21     Как созадть такой экземпляр? #25
4 быть объявлен только в моём исходнике без возможности повтороной декларации с тем же конструктором.
Как это сделать?
Убрав реализацию из интерфейса. В примере из вики, класс кота спрятан. никто не сможет вызвать ничего.

Вообще я так и не понял,чего ты в итоге хочешь добиться.) Т.е. тебе нужен открытый конструктор, который можешь вызвать только ты, объект должен быть общедоступен, но его может быть больше одного...
Именованное хранилище сделай и по строковому имени объекта вызывай именованные функции... гемор, зато будет то, чего тебе хочется.) Только вот хранилище придётся делать дружественым к объекту, а ты так не хочешь... пичалька.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 11:36  [ТС]     Как созадть такой экземпляр? #26
Завернуть один объект в другой я и сам могу. И потом к нему не достучаться? Причём, оболочек можно будет нафигачить сколько хочешь. Заверну я свой объхект в оболочечный и все те же требованяи перкочовывают к оболочечному объекту, а решения опять нет.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 11:49     Как созадть такой экземпляр? #27
Тогда, пересмотри требования.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
14.04.2011, 23:56     Как созадть такой экземпляр? #28
Цитата Сообщение от taras atavin Посмотреть сообщение
Как? Причём, нужна не итовая, например, константа, а именно константный объект.
А я знаю??(что тебе нужно)
например так
class A
{
const int b=5:
.......................
}
это для int
если по другому поиск
не далее как две недели мы это обсуждали
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2011, 05:28  [ТС]     Как созадть такой экземпляр? #29
А как нибудь так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class A
{
 protected:
  int x;
  A (int x, double y)
  {
   this->x=x;
   this->y=y;
  }
 public:
  double y;
  static const A a(2, 4.4);
  A (double y)
  {
   x=a.x;
   this->y=y;
  }
  int getx()
  {
   return x;
  }
};
можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 07:48     Как созадть такой экземпляр?
Еще ссылки по теме:

C++ Приведите простенький пример с наследованием, чтобы понять, как создавать экземпляр класса
C++ Как передать в метод класса ссылку на экземпляр
Как создать экземпляр контейнера, содержащий контейнеры и т.д C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 07:48     Как созадть такой экземпляр? #30
Цитата Сообщение от taras atavin Посмотреть сообщение
можно?
Где-то выше ты писал, что больше одного объекта может потребоваться. Так ты только один создашь.

С другой стороны, от любой другой статической константы, данная будет отличаться только областью видимости. Т.е. для глобального доступа просто объяви в хэдэре эту константу и всё. Помещать её в классе не обязательно.
C++
1
2
3
4
static const A a( 1, 2 );
 
int b = A::a.getx();
int c = a.getx();
Yandex
Объявления
15.04.2011, 07:48     Как созадть такой экземпляр?
Ответ Создать тему
Опции темы

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