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

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

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

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

09.08.2012, 15:59. Просмотров 565. Ответов 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;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 15:59     Конструктор: задать значения переменным-членам
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
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;
};
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2012, 16:21     Конструктор: задать значения переменным-членам #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 16:22  [ТС]     Конструктор: задать значения переменным-членам #5
Цитата Сообщение от Jupiter Посмотреть сообщение
этот вариант правильный, не хватает только конструктора копирования, деструктора и оператора присваивания
до этого я еще не дошел, спасибо за помощь
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
09.08.2012, 16:38     Конструктор: задать значения переменным-членам #6
Цитата Сообщение от DaskOFF Посмотреть сообщение
насколько правильный такой вариант?
Правильный. Хотя можно было указатель тоже в список инициализации перенести:
C++
1
noname() : ival(0), dval(0.0), pstring(new std::string) {}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.08.2012, 17:07     Конструктор: задать значения переменным-членам #7
John Prick, И прощай гарантия отсутствия исключений=(
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.08.2012, 17:10  [ТС]     Конструктор: задать значения переменным-членам #8
Цитата Сообщение от ForEveR Посмотреть сообщение
John Prick, И прощай гарантия отсутствия исключений=(
всмысле
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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++
Почему так? И как же тогда задать размер этого массива? class Test { public: Test(int size) : arrSize(size){}; private: ...

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

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

Конструктор принимающий два целочисленных значения - C++
Добрый день существует Конструктор принимающий два целочисленных значения, как можно просмотреть его значение в теле int main() ? A(int...

Присвоение значения переменной класса через конструктор - C++
#include <iostream> using namespace std; class Help { int userID; public: Help(int id) {int userID = id;} ~Help()...


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

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

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