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

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

Войти
Регистрация
Восстановить пароль
 
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

Конструктор: задать значения переменным-членам - C++

09.08.2012, 15:59. Просмотров 587. Ответов 9
Метки нет (Все метки)

Конструктор: задать значения переменным-членам

как я понял проблема в том, что после инициализации указателя ссылкой, указатель становиться неправильным, как можно исправить?
И как в конструкторе можно указать следующее(если можно)
C++
1
pstring = New std::string ("lalala");
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class noname
{
public:
    noname() : pstring(&g), ival(0), dval(0.0) {}
    noname(std::string ss) : pstring(&ss) {}
    noname(int i) : pstring(&g), ival(i), dval(0.0) {}
    noname(double d) : pstring(&g), ival(0), dval(d) {}
    noname(std::string sss, int i, double d) : pstring(&sss), ival(i), dval(d) {}
 
private:
    std::string *pstring, g;
    int ival;
    double dval;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор: задать значения переменным-членам (C++):

Задать переменным значения, введенные с клавиатуры - C++
учусь писать на с++ как сделать так чтобы: а= , b= и к этим равно приписывались именно те числа которые я задам с клавы не могу...

Конструктор с переменным числом параметров - C++
Привет Всем! интересует вопрос возможно ли описать Конструктор с переменным числом параметров? То есть возможен ли следующий код: ...

Конструктор с одним параметром и с переменным числом параметров - C++
пишу обычный класс, обычная лаба, где несколько конструкторов.применять одновременно в условии не сказано, но я решил помучатся и узнать...

Присваивание значения членам структуры - C++
Вот я создал структуру: struct Circle { int x1; int x2; int y1; int y2; int r1; int r2; };

Для класса задать конструктор и деструктор - C++
Ребята,нужна помощь в написании программы. Для класса задать конструктор(для выделения памяти,открытия файлов,задания начальных значений...

Присвоить переменным значения из текстового файла - C++
Здравствуйте. Только начинаю познавать великий и прекрасный Си "сложить" "сложить", просьба не ругаться на меня за банальные вопросы, а...

9
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2012, 16:14 #2
DaskOFF, поля инициализируются в порядке объявления их в классе, POD-типы инициализируются мусором, для объектов вызываются конструкторы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class noname
{
public:
    noname() : pstring(&g), ival(), dval() {}
//    noname(std::string ss) : pstring(&ss) {} //тут ты вообще инициализируешь указатель временным объектом так как параметр передается по значению
    noname(int i) : pstring(&g), ival(i), dval() {}
    noname(double d) : pstring(&g), ival(), dval(d) {}
//    noname(std::string sss, int i, double d) : pstring(&sss), ival(i), dval(d) {}
 
private:
    std::string g, *pstring;
    int ival;
    double dval;
};
Добавлено через 2 минуты
Цитата Сообщение от DaskOFF Посмотреть сообщение
что после инициализации указателя ссылкой
ссылок в твоем коде вообще нет
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 16:18  [ТС] #3
насколько правильный такой вариант?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class noname
{
public:
    noname() : ival(0), dval(0.0) {pstring = new std::string;}
    noname(std::string ss) : ival(0), dval(0.0) {pstring = new std::string(ss);}
    noname(int i) : ival(i), dval(0.0) {pstring = new std::string;}
    noname(double d) : ival(0), dval(d) {pstring = new std::string;}
    noname(std::string ss, int i, double d) : ival(i), dval(d) {pstring = new std::string(ss);}
 
private:
    std::string *pstring;
    int ival;
    double dval;
};
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2012, 16:21 #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 16:22  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
до этого я еще не дошел, спасибо за помощь
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
09.08.2012, 16:38 #6
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
Правильный. Хотя можно было указатель тоже в список инициализации перенести:
C++
1
noname() : ival(0), dval(0.0), pstring(new std::string) {}
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.08.2012, 17:07 #7
John Prick, И прощай гарантия отсутствия исключений=(
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 17:10  [ТС] #8
Цитата Сообщение от ForEveR Посмотреть сообщение
John Prick, И прощай гарантия отсутствия исключений=(
всмысле
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.08.2012, 17:15 #9
DaskOFF, Ну в прямом. new может кинуть исключение. Если вызывать new в теле конструктора - его можно обработать и поглотить, а вот если new вызывать в списке инициализации, то его тоже можно обработать (try-function-block), а вот поглотить увы, никак. Это в большинстве случаев не слишком важно, но упомянуть стоило.
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.08.2012, 17:16 #10
Цитата Сообщение от DaskOFF Посмотреть сообщение
всмысле
Ну там р-р-раз — и new облажался с выделением памяти. Или сам объект не смог по каким-то причинам создаться. Можно было бы перехватить это исключение и попробовать выделить ещё разок, вдруг там ОС уже одумалась и выдала памяти. Или, если не одумалась, то хотя бы поудалять всё, что навыделяли до этого для (уже) бесполезного объекта, после чего выкинуть нормальное исключение наверх, что объект не удалось создать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 17:16
Привет! Вот еще темы с ответами:

Не переопределяет значения переменным min и max - C++
Не переопределяет значения переменным min и max !? А выводит вначале инициализированные значения 1000 и -1000 Скажите почему???????????? ...

Как задать размер массива, который является членом класса, через конструктор? - C++
Почему так? И как же тогда задать размер этого массива? class Test { public: Test(int size) : arrSize(size){}; private: ...

Переменным m и n присвоить первые два значения из файла - C++
Добрый день! Помогите, пожалуйста. Мне нужно из файла первое значение присвоить переменной m, второе значение - присвоить переменной...

конструктор при возврате значения из ф-ии - C++
В литературе написано что при возврате значения из ф-ии вызывается конструктор копирования, но в примере такого не происходит. Сначала...


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

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

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