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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
#1

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

18.12.2012, 21:28. Просмотров 4376. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 21:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор без параметров (C++):

Не работает конструктор без параметров - C++
1) Не работает конструктор без параметров. 2) Как должен выглядеть деструктор для классов Server и Client? 3) Как правильно вынести...

Конструктор без параметров: не выводится строка в приведенном коде - C++
#include "stdafx.h" #include "conio.h" #include <iostream> using namespace::std; class String { protected: enum { SZ = 80 };...

Как вызвать конструктор с параметрами в конструкторе без параметров? - C++
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть что бы конструктор с параметрами выступал в роли основного. В...

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

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

передача параметров в конструктор при создании динамического массива - C++
Добрый день! Есть довольно тривиальный класс: class Array1d{ int* ptr_; public: Array1d(int n): ptr_(new...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 21:30 #2
Одно и то же, что:
C++
1
2
3
4
stack () // конструктор без параметров
{
    top = 0;
}
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 21:35 #5
Drus, Через список инициализация происходит шустрее. + к тому константные данные можно инициализировать только через список.
go
Эксперт C++
3586 / 1366 / 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
~ Эврика! ~
1243 / 992 / 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) {}.

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

Пустой конструктор без аргументов - C++
Всем доброго времени суток. Я сейчас в процессе изучения С++, читаю книгу Лафоре "Объектно-ориентированное программирование в С++". На...

Странный конструктор копирования или функция без имени? - C++
Вы знаете, до меня вдруг что-то дошло.. А что же у нас в строке 15??? Функция имеет название, тут его собствено нет! Есть только...

Функция без параметров? - C++
Начал разбираться с библиотекой alglib для решения интеграла сложной функции. В документации нашел такой код, но не могу разобраться с...

Конструкторы с и без параметров - C++
Здравствуйте, Не могу понять где ошибка, на экран выводит мусор, а нужно бы нормальные человеческие числа.. #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.12.2012, 22:04
Ответ Создать тему
Опции темы

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