![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
1. Инициализация – вызов конструктора (по\не по умолчанию)? 2. Определение – обычное присваивание? 3. Когда через конструктор присваиваем внутренним переменным значение, используется =. В чем тогда разница между определением? 4. Инициализация по умолчанию производится для каких встроенных типов? |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
конструктор есть только у классовых типов, инициализация же есть у всех. Определение переменной это выделение памяти под нее, а описание это просто упоминание.
можно инициализировать внутренние члены в списке инициализации, а можно присваивать им значения в теле конструктора. в одном случае - инициализация в другом - присвоение.
для всех простых (POD) типов объекты которых определены статически. Это сообщение отредактировал(а) mes - 29.12.2009, 11:11 |
||||
|
|||||
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
У Мейерса есть такой пример, немного изменил:
Не пишет, что будет ошибка. Получается при создании no1 для свойств не произошло вызова их конструкторов по умолчанию, это было только объявление. Их инициализация (или определение?) было произведено в конструкторе объекта. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
![]() ![]() ![]() Вы смешали все кучу.. тут даже не понятно с какой стороны начинать распутывать.. ![]() |
|||
|
||||
Gunslinger |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Если в конструкторе по умолчанию происходит присваивание внутренним переменным значения, то они сразу же получат значения. Получается, это объявление и инициализация. Технически: выделяется память и туда записывается соответствующее значение.
1. По аналогии переменные встроенного типа так же объявлены, а затем автоматически инициализированы. Но это оказывается не так. 2. Инициализация – это ведь тоже присвоение значения, т.е. память выделяется и в нее записывается какое-либо значение. В чем тогда отличие от определения? Это сообщение отредактировал(а) Gunslinger - 29.12.2009, 16:56 |
||||
|
|||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Инициализация - это когда вы явно присвоили значение переменной при объявлении. Определение - это просто объявление переменной. И она никак не инициализируется, если речь идёт о базовых типах. Т.е.
В случае с классом - вызывается его конструктор, который инициализирует переменные класса. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
extern type val; // описание объявление переменной - просто упоминание
type val; // определение переменной - выделение места с возможной инициализацией type val = 4; // определение переменной с явной инициализаций val = 5; // присвоение Добавлено @ 18:33 не совсем.. например константу проинициализировать можно (и нужно), а присвоить ничего нельзя.. и не важно что на низком уровне инициализация и присвоение могут быть реализованы одинаково. Добавлено @ 18:37
не объявлении, а при определении.. и это явная инициализация, а может быть неявная.. и "присвоили" здесь не несет смысл присвоения. неа ![]() Это сообщение отредактировал(а) mes - 29.12.2009, 19:08 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
а в чём разница? type val; - это же объявление переменной. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
для переменных объявление происходит посредством употребления extern. ![]() Это сообщение отредактировал(а) mes - 29.12.2009, 18:50 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
ну вы же сами писали:
![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Вроде стало ясно
![]()
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а это уже издержки перевода.. тем более что нам не важно где определена переменная.. то есть примеры
с точки зрения расмотрения автором могут быть эквивалентны.. и по сути ему важно именно объявление, а то что должно быть у этой переменной определение подразумевается.. Но если рассматривается именно конструкция, и хотя любое определение содержит в себе объявление, называть объявлением определение некорректно. Это сообщение отредактировал(а) mes - 29.12.2009, 20:51 |
||||
|
|||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Игра слов. Забавно.
![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Gunslinger |
|
||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
если
то это только объявление - в переменной лежит мусор.
это объявление и... неявная инициализация (конструктором int по умолчанию)?
объявление и сразу инициализация - таком способе конструктор типа не вызывается.
Вот поэтому код из первого поста мне и не понятен. Повторю:
Либо константный аргумент не тоже самое, что и константная переменная, либо константу дозволяется инициализировать позже, если она не инициализирована (но тогда неявной инициализации у string нет). |
||||||||||||
|
|||||||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |