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

Конструктор без параметров - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:28     Конструктор без параметров #1
C++
1
2
3
4
5
6
7
8
9
class stack
{
private:
  int top;   // вершина стека
  int s[10]; // массив в котором хранится стек
 
public:
  stack (): top(0) // конструктор без параметров
  {}
Для чего в конструкторе без параметров :top(0)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
18.12.2012, 21:30     Конструктор без параметров #2
Одно и то же, что:
C++
1
2
3
4
stack () // конструктор без параметров
{
    top = 0;
}
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
18.12.2012, 21:30     Конструктор без параметров #3
Инициализация.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:32  [ТС]     Конструктор без параметров #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Инициализация.
Я понимаю, что конструктор это инициализатор, однако почему записано не в теле конструктора, а через : и почему используется для переменной скобки ()?
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
18.12.2012, 21:35     Конструктор без параметров #5
Drus, Через список инициализация происходит шустрее. + к тому константные данные можно инициализировать только через список.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.12.2012, 21:40     Конструктор без параметров #6
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
однако почему записано не в теле конструктора, а через : и почему используется для переменной скобки ()?
Так захотел автор кода. Так бы сделали многие.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:45  [ТС]     Конструктор без параметров #7
Что-то я не совсем понял, а если необходимо инициализировать несколько значений, как это будет выглядеть? И разница только в быстродействии?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
18.12.2012, 21:50     Конструктор без параметров #8
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Что-то я не совсем понял, а если необходимо инициализировать несколько значений, как это будет выглядеть? И разница только в быстродействии?
Будет перечисление через запятую: classname() : var1(13), var2(42), var3(146) {}.

Разница в том, что так конструкторы инициализируемых полей вызываются один раз, а если писать присваивания в теле конструктора класса, то будут сначала вызваны конструкторы полей по умолчанию, а потом уже операторы присваивания. Очевидно, это как-то влияет на производительность; для некоторых классов может повлиять на логику работы. Плюс присваиванием в конструкторе нельзя инициализировать некоторые объекты вроде тех же ссылок, только списком инициализации.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:56  [ТС]     Конструктор без параметров #9
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Будет перечисление через запятую: classname() : var1(13), var2(42), var3(146) {}.

Разница в том, что так конструкторы инициализируемых полей вызываются один раз, а если писать присваивания в теле конструктора класса, то будут сначала вызваны конструкторы полей по умолчанию, а потом уже операторы присваивания. Очевидно, это как-то влияет на производительность; для некоторых классов может повлиять на логику работы. Плюс присваиванием в конструкторе нельзя инициализировать некоторые объекты вроде тех же ссылок, только списком инициализации.
Т.е. инициализировать лучше этим способом, чем присваиванием в теле конструктора?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 22:04     Конструктор без параметров
Еще ссылки по теме:

C++ Странный конструктор копирования или функция без имени?
Как вызвать конструктор с параметрами в конструкторе без параметров? C++
C++ Конструктор без параметров: не выводится строка в приведенном коде

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
18.12.2012, 22:04     Конструктор без параметров #10
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Т.е. инициализировать лучше этим способом, чем присваиванием в теле конструктора?
Да. И помните, что конструкторы полей вызываются в том порядке, в каком поля перечислены в определении класса. Вне зависимости от того, в каком порядке вы их напишете в списке инициализации. Это на случай, если вздумается инициализировать одно поле значением другого.
Yandex
Объявления
18.12.2012, 22:04     Конструктор без параметров
Ответ Создать тему
Опции темы

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