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

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

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

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

07.04.2011, 09:10. Просмотров 1960. Ответов 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 поле. В...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
07.04.2011, 10:56     Как созадть такой экземпляр? #2
C++
1
2
3
4
5
6
7
8
class A
{
protected:
    type field;
 
public:
    A(type _f): field(_f) {};
};
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 15:01     Как созадть такой экземпляр? #3
Унаследовать от него класс B, который будет настраивать field.)
И использовать через указатель на А.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.04.2011, 12:33  [ТС]     Как созадть такой экземпляр? #4
А наследник будет иметь методы методы, записывающие данное поле? Не пойдёт.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.04.2011, 14:40     Как созадть такой экземпляр? #5
Конструктор тебя точно не устраивает?
Тогда, можно дружественную функцию сделать.

А это праздный интерес или реально такая проблема возникла?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
13.04.2011, 21:38     Как созадть такой экземпляр? #6
Наверное, никак. Действительно, ты все конструкторы определяешь сам, а которые не определяешь, те обнуляют все поля.
А конструкторы использовать нельзя, ибо они открыты. Тупик.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.04.2011, 22:40     Как созадть такой экземпляр? #7
kravam, Нифига они не обнуляют по крайней мере ПОД-ы.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
13.04.2011, 22:55     Как созадть такой экземпляр? #8
А ну да я перепутал, это такой обнуляет
C++
1
konstruktor () {};
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
13.04.2011, 23:13     Как созадть такой экземпляр? #9
а зачем нужен класс к которому не достучаться???

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Как создать экземпляр класса A с определённым значением члена field?
создай константу
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.04.2011, 23:46     Как созадть такой экземпляр? #10
kravam, Я так понимаю ты опять перепутал, да?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class some_c
{
public:
    some_c() { }
    int getT() const {return t;}
private:
    int t;
};
 
int main()
{
    some_c s;
    std::cout<<s.getT()<<'\n';
}
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
13.04.2011, 23:53     Как созадть такой экземпляр? #11
"Поведение конструктора по умолчанию, добавляемого компилятором, заключается в установке всех данных-членов в ноль"

Брайан Оверленд, "С++ без страха", издательство "Триумф", Москва, 2005.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
14.04.2011, 00:13     Как созадть такой экземпляр? #12
kravam, цитировать авторитетов, это, конечно, хорошо, но всё же верить своим глазам как-то привычнее. А они сообщают мозгу следующую информацию:
При использовании конструктора, сгенерированного компилятором, в переменных содержится мусор.
По крайней мере MSVC и gcc поступают именно так.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 06:20  [ТС]     Как созадть такой экземпляр? #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Тогда, можно дружественную функцию сделать.
Без друзей.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Конструктор тебя точно не устраивает?
Только если можно ограничить число его применний. А в саммом классе никак нельзя прописать создание экземпляра? Что нибудбь типа
C++
1
2
3
4
5
6
class A
{
 static A o;
 ...
};
...
?

Добавлено через 4 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем нужен класс к которому не достучаться???
Кто сказал,ч то к нему нельзя достучаться? Методы, читающее упомянутое поле, будут обязательно, а не будет методов, пишуших это же поле.
Цитата Сообщение от ValeryS Посмотреть сообщение
создай константу
Как?

Добавлено через 15 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем нужен класс к которому не достучаться???
Кто сказал,ч то к нему нельзя достучаться? Методы, читающее упомянутое поле, будут обязательно, а не будет методов, пишуших это же поле.
Цитата Сообщение от ValeryS Посмотреть сообщение
создай константу
Как? Причём, нужна не итовая, например, константа, а именно константный объект.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 07:03     Как созадть такой экземпляр? #14
Цитата Сообщение от kravam Посмотреть сообщение
это такой обнуляет
В дебаге обнуляет, да. Но только в дебаге. В релизе никакой лишней работы без спросу не выполняется.

Добавлено через 4 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Только если можно ограничить число его применний.
Т.е. это синглтон с неожиданными требованиями?
Не совсем понятна природа данных ограничений. Точнее, совсем не понятна.

Вот зря не хочешь с наследованием делать. Можно было бы два интерфейс сделать. оДин на чтение, второй для записи. И повсеместно использовать только читающий интерфейс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2011, 07:05     Как созадть такой экземпляр?
Еще ссылки по теме:

Экземпляр в хедере. Обьект в меин. Функция в 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}; просто так я не смог его...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2011, 07:05  [ТС]     Как созадть такой экземпляр? #15
Цитата Сообщение от Deviaphan Посмотреть сообщение
В дебаге обнуляет, да. Но только в дебаге. В релизе никакой лишней работы без спросу не выполняется.
Кто сказал, что она лишняя? Отладил ты в дебаге, потом слепил релиз, а из-за того, что релизный конструктор не обнуляет, полезли глюки, но отладочной инфы уже нет и фиг ты найдёшь, откуда глюки. Вывод: дебаг негоден для дебага. Всё относящееся к явно объявленным и явно читаемым данным должно совпадать, лишенй эта работа не будет, иначе это не дебаг. Различаются же эти версии тем, что в релизе нет отладочной инфы, из-за чего дебагеры не могут наблюдать его исполнение. Кстати, я вообще избегаю дефолтных конструкторов. Не доверяю им и именно из-за незнания их поведения в отношении полей объекта. Но если нет указателей, то деструкторы у меня дефолтные.
Yandex
Объявления
14.04.2011, 07:05     Как созадть такой экземпляр?
Ответ Создать тему
Опции темы

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