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

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

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

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

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

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

Как создать экземпляр этого класса? - 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++
Вот программа, два класса и функция main #pragma once class BaseClass { public: BaseClass(); ~BaseClass();

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

Как объявить указатель на массив через typedef и как инициализировать такой тип - C++
Как заставить заработать этот фрагмент кода? INT_L -- указатель на массив из 100 элементов типа char; Не получается в переменную C...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 07:09 #16
Цитата Сообщение от taras atavin Посмотреть сообщение
Кто сказал, что она лишняя?
Если программист не стал инициализировать переменную, значит, инициализация не нужна. Соответственно, неявная инициализация - лишняя работа.
Я бы и в дебаге обнуление отключил, если бы знал как.) С другой стороны, RAII эту проблему устраняет, так что пофиг.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 07:13  [ТС] #17
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. это синглтон с неожиданными требованиями?
Не совсем понятна природа данных ограничений. Точнее, совсем не понятна.
Есть два конструткора, оба с параметрами, один я вызову сам и полнсотью исчерпаю его разрешенные вызовы, а второй будет подробно прокомментирован и доступен для неограниченного использования.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 07:18 #18
Т.е. ты хочешь быть уверен, что первый конструктор будет вызван только один раз и до взовов второго конструктора, так?
0
silent_1991
14.04.2011, 07:57
  #19

Не по теме:

Цитата Сообщение от 'Deviaphan' Посмотреть сообщение
В дебаге обнуляет
У меня в 10-й студии и там не обнуляет...

0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 08:26  [ТС] #20
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. ты хочешь быть уверен, что первый конструктор будет вызван только один раз и до взовов второго конструктора, так?
Я ещё посмотрю, ровно 1, или ровно 16. Но все 16 раз я его вызову сам.

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

Вообще я так и не понял,чего ты в итоге хочешь добиться.) Т.е. тебе нужен открытый конструктор, который можешь вызвать только ты, объект должен быть общедоступен, но его может быть больше одного...
Именованное хранилище сделай и по строковому имени объекта вызывай именованные функции... гемор, зато будет то, чего тебе хочется.) Только вот хранилище придётся делать дружественым к объекту, а ты так не хочешь... пичалька.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 11:36  [ТС] #26
Завернуть один объект в другой я и сам могу. И потом к нему не достучаться? Причём, оболочек можно будет нафигачить сколько хочешь. Заверну я свой объхект в оболочечный и все те же требованяи перкочовывают к оболочечному объекту, а решения опять нет.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 11:49 #27
Тогда, пересмотри требования.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,850
14.04.2011, 23:56 #28
Цитата Сообщение от taras atavin Посмотреть сообщение
Как? Причём, нужна не итовая, например, константа, а именно константный объект.
А я знаю??(что тебе нужно)
например так
class A
{
const int b=5:
.......................
}
это для int
если по другому поиск
не далее как две недели мы это обсуждали
0
taras atavin
Ушёл с форума.
3569 / 1753 / 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;
  }
};
можно?
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 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();
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 07:48
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.04.2011, 07:48
Ответ Создать тему
Опции темы

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