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

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

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

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

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

29
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
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) {};
};
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 15:01 #3
Унаследовать от него класс B, который будет настраивать field.)
И использовать через указатель на А.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.04.2011, 12:33  [ТС] #4
А наследник будет иметь методы методы, записывающие данное поле? Не пойдёт.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.04.2011, 14:40 #5
Конструктор тебя точно не устраивает?
Тогда, можно дружественную функцию сделать.

А это праздный интерес или реально такая проблема возникла?
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
13.04.2011, 21:38 #6
Наверное, никак. Действительно, ты все конструкторы определяешь сам, а которые не определяешь, те обнуляют все поля.
А конструкторы использовать нельзя, ибо они открыты. Тупик.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
13.04.2011, 22:40 #7
kravam, Нифига они не обнуляют по крайней мере ПОД-ы.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
13.04.2011, 22:55 #8
А ну да я перепутал, это такой обнуляет
C++
1
konstruktor () {};
0
ValeryS
Модератор
6679 / 5088 / 476
Регистрация: 14.02.2011
Сообщений: 17,087
13.04.2011, 23:13 #9
а зачем нужен класс к которому не достучаться???

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Как создать экземпляр класса A с определённым значением члена field?
создай константу
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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';
}
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
13.04.2011, 23:53 #11
"Поведение конструктора по умолчанию, добавляемого компилятором, заключается в установке всех данных-членов в ноль"

Брайан Оверленд, "С++ без страха", издательство "Триумф", Москва, 2005.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
14.04.2011, 00:13 #12
kravam, цитировать авторитетов, это, конечно, хорошо, но всё же верить своим глазам как-то привычнее. А они сообщают мозгу следующую информацию:
При использовании конструктора, сгенерированного компилятором, в переменных содержится мусор.
По крайней мере MSVC и gcc поступают именно так.
0
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 Посмотреть сообщение
создай константу
Как? Причём, нужна не итовая, например, константа, а именно константный объект.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.04.2011, 07:03 #14
Цитата Сообщение от kravam Посмотреть сообщение
это такой обнуляет
В дебаге обнуляет, да. Но только в дебаге. В релизе никакой лишней работы без спросу не выполняется.

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

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

Как объявить 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...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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