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

С++ для начинающих

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

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

07.04.2011, 09:10. Просмотров 1959. Ответов 29
Метки нет (Все метки)

Пусть есть класс:
C++
1
2
3
4
5
6
class A
{
 protected:
  type field;
....
};
а выше описан тип (возможно класс, или структура) type, или макрос type - синоним существующего (возможно стандартного) типа. В классе нет открытых членов, прямо, или косвенно пишуших член field. Как создать экземпляр класса A с определённым значением члена field?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 09:10     Как созадть такой экземпляр?
Посмотрите здесь:

Как создать экземпляр этого класса? - C++
#pragma once template<typename T> class fgFSM { public: fgFSM() : _time_in_cur_state(0.0f), _cur_state(-1) { }

Как создать экземпляр контейнера, содержащий контейнеры и т.д - C++
Добрый вечер! как это можно сделать, не создавая вспомогательных классов?! std::map<int, std::map<int, std::map<int, ...> > > coll; ...

Как передать в метод класса ссылку на экземпляр - C++
Есть класс class Class{ ... } Как передать в метод экземплер класса из которого вызывается этот метод? Пробывал так: class Class{ ...

Как сделать, чтобы экземпляр класса возвращал значение? - C++
так ifstream m("file"); if(m)//<<<===как заставить свой класс делать также { //действие }

Как вернуть экземпляр класса через шаблонную функцию - C++
Вот программа, два класса и функция main #pragma once class BaseClass { public: BaseClass(); ~BaseClass();

Как объявить 10 значную переменную такой как 9876543210 - C++
Какой тип переменной используется для объявления 10 значной переменной такой как 9876543210? пробовал double, но компилятор выдаёт...

Приведите простенький пример с наследованием, чтобы понять, как создавать экземпляр класса - C++
Добрый день. Помогите нубу с наследованием на С++. Суть такова. Мне дано 2 класса. У базового 4 поля. У дочерного 1 поле. В...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 10:14     Как созадть такой экземпляр? #21
pimpl?
А ты уверен, что это должен быть один объект?
Первые три пункта без проблем, но последний решается либо пимплом, либо разделением на два класса, что по сути будет тот же pimpl.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 10:37  [ТС]     Как созадть такой экземпляр? #22
Что такое pimpl?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 10:44     Как созадть такой экземпляр? #23
http://en.wikipedia.org/wiki/Opaque_pointer
Но придётся разделить интерфейс на "для тебя" и "для всех". Т.е. с тем объектом, который у тебя сейчас, нужно будет работать не напрямую, а через два разных интерфейса.
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++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 11:21     Как созадть такой экземпляр? #25
4 быть объявлен только в моём исходнике без возможности повтороной декларации с тем же конструктором.
Как это сделать?
Убрав реализацию из интерфейса. В примере из вики, класс кота спрятан. никто не сможет вызвать ничего.

Вообще я так и не понял,чего ты в итоге хочешь добиться.) Т.е. тебе нужен открытый конструктор, который можешь вызвать только ты, объект должен быть общедоступен, но его может быть больше одного...
Именованное хранилище сделай и по строковому имени объекта вызывай именованные функции... гемор, зато будет то, чего тебе хочется.) Только вот хранилище придётся делать дружественым к объекту, а ты так не хочешь... пичалька.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 11:36  [ТС]     Как созадть такой экземпляр? #26
Завернуть один объект в другой я и сам могу. И потом к нему не достучаться? Причём, оболочек можно будет нафигачить сколько хочешь. Заверну я свой объхект в оболочечный и все те же требованяи перкочовывают к оболочечному объекту, а решения опять нет.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 11:49     Как созадть такой экземпляр? #27
Тогда, пересмотри требования.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,730
14.04.2011, 23:56     Как созадть такой экземпляр? #28
Цитата Сообщение от taras atavin Посмотреть сообщение
Как? Причём, нужна не итовая, например, константа, а именно константный объект.
А я знаю??(что тебе нужно)
например так
class A
{
const int b=5:
.......................
}
это для int
если по другому поиск
не далее как две недели мы это обсуждали
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     Как созадть такой экземпляр?
Еще ссылки по теме:

Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать? - C++
Как сделать что бы void modif() изменял значение поля hours для обьекта st2. Есть 3 файла: 1.h 2.cpp main.cpp 1.h class...

как исправить Ошибка 8 error C2259: Tabl: невозможно создать экземпляр абстрактного класса - C++
имеется абстрактный класс, у нее есть 4 виртуальных функций: запись и чтение с помощью С и С++ имеется класс Tabl производный от...

Как изобразить такой рисунок? - C++
Буду очень благодарен в помощи.

Как объявить такой union? - C++
12 именованных структур, например, RECT, и массив из 12-ти элементов того же типа. Пусть имена RectA, RectB, RectC, RectD, RectE, RectF,...

Как инициализировать такой массив - C++
Нужно в проге(консольное приложение Win32) испоьзовать массив таких размеров double massiv_resultatov={0}; просто так я не смог его...


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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     Как созадть такой экземпляр?
Ответ Создать тему
Опции темы

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