Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/33: Рейтинг темы: голосов - 33, средняя оценка - 4.79
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
#1

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

18.12.2012, 21:28. Просмотров 6071. Ответов 9
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
class stack
{
private:
  int top;   // вершина стека
  int s[10]; // массив в котором хранится стек
 
public:
  stack (): top(0) // конструктор без параметров
  {}
Для чего в конструкторе без параметров :top(0)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 21:28
Ответы с готовыми решениями:

Не работает конструктор без параметров
1) Не работает конструктор без параметров. 2) Как должен выглядеть деструктор...

Как вызвать конструктор с параметрами в конструкторе без параметров?
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть...

Конструктор без параметров: не выводится строка в приведенном коде
#include "stdafx.h" #include "conio.h" #include <iostream> using...

Контруктор шаблонного класса: почему в заданном коде необходим конструктор без параметров?
#include <cstdlib> #include <iostream> #include <dcl.hpp> #include <string>...

Конструктор с переменным числом параметров
Привет Всем! интересует вопрос возможно ли описать Конструктор с переменным...

9
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 21:30 #2
Одно и то же, что:
C++
1
2
3
4
stack () // конструктор без параметров
{
    top = 0;
}
2
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
18.12.2012, 21:30 #3
Инициализация.
1
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:32  [ТС] #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Инициализация.
Я понимаю, что конструктор это инициализатор, однако почему записано не в теле конструктора, а через : и почему используется для переменной скобки ()?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 21:35 #5
Drus, Через список инициализация происходит шустрее. + к тому константные данные можно инициализировать только через список.
1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
18.12.2012, 21:40 #6
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
однако почему записано не в теле конструктора, а через : и почему используется для переменной скобки ()?
Так захотел автор кода. Так бы сделали многие.
0
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
18.12.2012, 21:45  [ТС] #7
Что-то я не совсем понял, а если необходимо инициализировать несколько значений, как это будет выглядеть? И разница только в быстродействии?
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.12.2012, 21:50 #8
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Что-то я не совсем понял, а если необходимо инициализировать несколько значений, как это будет выглядеть? И разница только в быстродействии?
Будет перечисление через запятую: classname() : var1(13), var2(42), var3(146) {}.

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

Разница в том, что так конструкторы инициализируемых полей вызываются один раз, а если писать присваивания в теле конструктора класса, то будут сначала вызваны конструкторы полей по умолчанию, а потом уже операторы присваивания. Очевидно, это как-то влияет на производительность; для некоторых классов может повлиять на логику работы. Плюс присваиванием в конструкторе нельзя инициализировать некоторые объекты вроде тех же ссылок, только списком инициализации.
Т.е. инициализировать лучше этим способом, чем присваиванием в теле конструктора?
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.12.2012, 22:04 #10
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Т.е. инициализировать лучше этим способом, чем присваиванием в теле конструктора?
Да. И помните, что конструкторы полей вызываются в том порядке, в каком поля перечислены в определении класса. Вне зависимости от того, в каком порядке вы их напишете в списке инициализации. Это на случай, если вздумается инициализировать одно поле значением другого.
1
18.12.2012, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 22:04

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

передача параметров в конструктор при создании динамического массива
Добрый день! Есть довольно тривиальный класс: class Array1d{ int*...

Пустой конструктор без аргументов
Всем доброго времени суток. Я сейчас в процессе изучения С++, читаю книгу...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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