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

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

Восстановить пароль Регистрация
 
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.08.2012, 15:59     Конструктор: задать значения переменным-членам #1
Конструктор: задать значения переменным-членам

как я понял проблема в том, что после инициализации указателя ссылкой, указатель становиться неправильным, как можно исправить?
И как в конструкторе можно указать следующее(если можно)
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;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 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 Посмотреть сообщение
что после инициализации указателя ссылкой
ссылок в твоем коде вообще нет
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 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;
};
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2012, 16:21     Конструктор: задать значения переменным-членам #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.08.2012, 16:22  [ТС]     Конструктор: задать значения переменным-членам #5
Цитата Сообщение от Jupiter Посмотреть сообщение
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
до этого я еще не дошел, спасибо за помощь
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.08.2012, 16:38     Конструктор: задать значения переменным-членам #6
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
Правильный. Хотя можно было указатель тоже в список инициализации перенести:
C++
1
noname() : ival(0), dval(0.0), pstring(new std::string) {}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.08.2012, 17:07     Конструктор: задать значения переменным-членам #7
John Prick, И прощай гарантия отсутствия исключений=(
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.08.2012, 17:10  [ТС]     Конструктор: задать значения переменным-членам #8
Цитата Сообщение от ForEveR Посмотреть сообщение
John Prick, И прощай гарантия отсутствия исключений=(
всмысле
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.08.2012, 17:15     Конструктор: задать значения переменным-членам #9
DaskOFF, Ну в прямом. new может кинуть исключение. Если вызывать new в теле конструктора - его можно обработать и поглотить, а вот если new вызывать в списке инициализации, то его тоже можно обработать (try-function-block), а вот поглотить увы, никак. Это в большинстве случаев не слишком важно, но упомянуть стоило.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 17:16     Конструктор: задать значения переменным-членам
Еще ссылки по теме:

C++ Присвоить переменным значения из текстового файла
C++ Не переопределяет значения переменным min и max
Переменным m и n присвоить первые два значения из файла C++

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.08.2012, 17:16     Конструктор: задать значения переменным-членам #10
Цитата Сообщение от DaskOFF Посмотреть сообщение
всмысле
Ну там р-р-раз — и new облажался с выделением памяти. Или сам объект не смог по каким-то причинам создаться. Можно было бы перехватить это исключение и попробовать выделить ещё разок, вдруг там ОС уже одумалась и выдала памяти. Или, если не одумалась, то хотя бы поудалять всё, что навыделяли до этого для (уже) бесполезного объекта, после чего выкинуть нормальное исключение наверх, что объект не удалось создать.
Yandex
Объявления
09.08.2012, 17:16     Конструктор: задать значения переменным-членам
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru