Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/32: Рейтинг темы: голосов - 32, средняя оценка - 4.69
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383

Конструктор по умолчанию и ссылочная переменная

06.06.2011, 20:14. Показов 6629. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть у меня, скажем
C++
1
2
3
4
5
6
7
8
MyCLass
{
private:
     MyType &l;
public:
     MyClass ();
     MyClass ( MyType &l );
};
с обычным конструктором все впорядке:
C++
1
MyClass::MyClass ( MyType &_l ):l ( _l ) {};
возможна ли реализация такого конструктора по умолчанию?

ЗЫ без списка инициализации:
Bash
1
2
In constructor ‘MyClass::MyClass()’:
uninitialized reference member ‘MyClass::l’
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2011, 20:14
Ответы с готовыми решениями:

Ссылочная переменная
Добрый день форумчане. Есть код Point p; for(int i = 0; i < 10; i++) { p = new Point(0, i); } В книге сказано...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

20
 Аватар для pito211
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
06.06.2011, 20:26
а чем ты в конструкторе по умолчанию хочешь инициализировать l? this не получится воспользоваться, потому что объект ещё не создан
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 21:31  [ТС]
Цитата Сообщение от pito211 Посмотреть сообщение
а чем ты в конструкторе по умолчанию хочешь инициализировать l? this не получится воспользоваться, потому что объект ещё не создан
ну неважно чем, вопрос в том как описать конструктор по умолчанию, в котором l либо не инициализируется вообще, либо инициализируется какой-либо константой (как, например указать - NULL ), жаелатьно, конечно, чтобы он оставался не инициализируемым, но на это компилятор почемуто ругается...
0
 Аватар для denix
65 / 65 / 5
Регистрация: 11.01.2009
Сообщений: 130
06.06.2011, 21:55
Добавлено через 9 минут
Цитата Сообщение от pito211 Посмотреть сообщение
this не получится воспользоваться, потому что объект ещё не создан
что за бред
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 22:05
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
ну неважно чем, вопрос в том как описать конструктор по умолчанию, в котором l либо не инициализируется вообще, либо инициализируется какой-либо константой (как, например указать - NULL ), жаелатьно, конечно, чтобы он оставался не инициализируемым, но на это компилятор почемуто ругается...
Инициализация ссылки - ОБЯЗАТЕЛЬНА! Поэтому законный вопрос: чем будешь инициализировать?
1
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 22:09  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Инициализация ссылки - ОБЯЗАТЕЛЬНА! Поэтому законный вопрос: чем будешь инициализировать?
Благодарю) Судя по всему - ничем. И в таком случае, как я понял в классе с ссылочной переменной конструктора по умолчанию быть не может?
0
 Аватар для denix
65 / 65 / 5
Регистрация: 11.01.2009
Сообщений: 130
06.06.2011, 22:32
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
в классе с ссылочной переменной конструктора по умолчанию быть не может?
может
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 22:50
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
И в таком случае, как я понял в классе с ссылочной переменной конструктора по умолчанию быть не может?
Может. Например, конструктор может вызывать некую функцию, которая возвращает ссылку.
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 22:57  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Может. Например, конструктор может вызывать некую функцию, которая возвращает ссылку.
хм... из списка инициализации?
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 22:59
Да. Там в скобочках можно писать выражение, приводимое к типу поля. Более того, можно через запятую писать несколько выражений...
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 23:06  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Да. Там в скобочках можно писать выражение, приводимое к типу поля. Более того, можно через запятую писать несколько выражений...
ну это понятно...
тогда можно ведь реализовать неопределенную инициализацую: так чтобы функция возвращала ссылку на переменную, которая создается в теле функции. хм.. надо попробовать
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 23:09
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
ну это понятно...
тогда можно ведь реализовать неопределенную инициализацую: так чтобы функция возвращала ссылку на переменную, которая создается в теле функции. хм.. надо попробовать
А вот этого делать НЕ НУЖНО! Локальная переменная помрет, и куда тогда будет показывать ваша ссылка? Более того, вроде компилер такой выверт отслеживает и пишет "фигасе вам"... Но проверьте на всякий случай...
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 23:22  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А вот этого делать НЕ НУЖНО! Локальная переменная помрет, и куда тогда будет показывать ваша ссылка?
вот это мне И БЫЛО НУЖНО я знаю, что локальная переменная помирают) по сути такой такой выверт напоминает
Assembler
1
A dw ?
в ассемблере. У меня конструктор по умолчанию все равно приватный и нужен только для одной статической функции, которая сама присваивает этой ссылке нужное значение. Правда тут вылетает варнинг про возврат локальной переменной. И назревает стилистический вопрос: что лучше? создать для такой цели обычный конструкор с одним фиктивным параметром или оставить красивенький конструктор по умолчанию и вылетающий варнинг?
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 23:27
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
вот это мне И БЫЛО НУЖНО я знаю, что локальная переменная помирают) по сути такой такой выверт напоминает
Assembler
1
A dw ?
в ассемблере. У меня конструктор по умолчанию все равно приватный и нужен только для одной статической функции, которая сама присваивает этой ссылке нужное значение. Правда тут вылетает варнинг про возврат локальной переменной. И назревает стилистический вопрос: что лучше? создать для такой цели обычный конструкор с одним фиктивным параметром или оставить красивенький конструктор по умолчанию и вылетающий варнинг?
Таким образом, ваша статическая функция играет роль конструктора. Singlton? что ли реализуете? Обычно в этом паттерне пишут статическую функцию для создания единственного объекта. Насколько помню, реализацию конструктора можно просто не писать.
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 23:36  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Таким образом, ваша статическая функция играет роль конструктора. Singlton? что ли реализуете? Обычно в этом паттерне пишут статическую функцию для создания единственного объекта. Насколько помню, реализацию конструктора можно просто не писать.
мм не совсем. Просто статическая функция выполняет некоторые действия, идентичным приватным методам класса. А если точнее, то это просто своеобразная ( наверняка далеко не лучшая ) реализация внутренней программной командной строки
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.06.2011, 23:47
Посмотрите Синглтон Мейерса. Там как раз поле-ссылка инициализировалась правильным способом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* Синглтоном Мейерса называется синглтон вида: */
// c.h
class C
{
C();
C(C&);
public:
static C& Instance();
...
};
// c.cpp
C& C::Instance()
{
static C o;
return o;
}
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.06.2011, 23:53
-MefistofeL-, почитай про различие между ссылкой и указателем

Сравнение указателей и ссылок.
Ссылки и указатели
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
06.06.2011, 23:56  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Посмотрите Синглтон Мейерса. Там как раз поле-ссылка инициализировалась правильным способом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* Синглтоном Мейерса называется синглтон вида: */
// c.h
class C
{
C();
C(C&);
public:
static C& Instance();
...
};
// c.cpp
C& C::Instance()
{
static C o;
return o;
}
хм.. в википедии указано, что Instance - это указатель, а не ссылка((
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
07.06.2011, 00:08
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
хм.. в википедии указано, что Instance - это указатель, а не ссылка((
Дык то - классический синглтон, а это - синглтон Мейерса...
0
 Аватар для -MefistofeL-
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
07.06.2011, 00:10  [ТС]
чето гугл не помогает)) можешь ссылочку подкинуть?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2011, 00:10
Помогаю со студенческими работами здесь

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор с параметрами И конструктор по умолчанию. Как?
Опять прошу совета. Выполняю тут из интернета задания. Класс надо создать, там будут конструкторы и с пар. и без аргументов. И вот не...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Конструктор по умолчанию
Показывает ошибку : 1 IntelliSense: для класса "tovar" не существует конструктор по умолчанию Подскажите пожалуйста как сделать ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru