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

Пустой конструктор без аргументов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
15.08.2013, 23:28     Пустой конструктор без аргументов #1
Всем доброго времени суток.

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

Неполный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class card
{
private:
    int number;
    Suit suit;
public:
    card () // вот, собственно, и сам конструктор
    {  }
 
    card (int n, Suit s) : number(n), suit(s)
    {  }
    void display();
    bool isEqual(card);
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dremer
 Аватар для dremer
8 / 8 / 0
Регистрация: 18.06.2012
Сообщений: 33
15.08.2013, 23:43     Пустой конструктор без аргументов #2
murtukov, Это конструктор по умолчанию, если его не определить он генерируется самостоятельно. В нем можно определить начальные значения переменных класса.
Он нужен при создании объекта класса:
C++
1
2
card cd; //используется конструктор по умолчанию
card cd2(10, s) //используется конструктор card(int, Suit), где s это объект Suit
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
15.08.2013, 23:46  [ТС]     Пустой конструктор без аргументов #3
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.08.2013, 23:49     Пустой конструктор без аргументов #4
murtukov, наличие этого конструктора
Цитата Сообщение от murtukov Посмотреть сообщение
C++
1
card (int n, Suit s)
перекрывает конструктор без аргуметов т.е. компилятор уже не генерирует конструктор без аргуметов, ты можешь это проверить создав массив карт

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class card
{
private:
    int number;
    int suit;
public:
    //card () // вот, собственно, и сам конструктор
    //{  }
 
    card (int n, int s) : number(n), suit(s)
    {  }
    void display();
    bool isEqual(card);
};
 
int main()
{
   card cards[3];
}
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,656
Записей в блоге: 1
16.08.2013, 00:15     Пустой конструктор без аргументов #5
Пустой "снаружи" (т.е. без параметров) не означает, что он пустой "внутри". Он может занести значения в поля объекта, создать другие объекты. Вообще, задача конструктора - сделать из куска выделенной памяти "правильно проинициализированный объект"

Сгенерированный автоматически - просто заглушка, ничего не делающая (чтобы его можно было вызвать).
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.08.2013, 00:16     Пустой конструктор без аргументов #6
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
неправда. он не генерируется самостоятельно.
точнее генерируется только, если иных конструкторов не определено.
В твоём же случае при наличии card (int n, int s) СГЕНЕРИРОВАННЫХ конструкторов по умолчанию не будет, т.к. подразумевается, что ты определил, что объект класса должен создаваться только, принимая 2 аргумента.
Чтобы всё же можно было конструировать объекты по-умолчанию, конструктор по-умолчанию ты обязан объявить явно!
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
16.08.2013, 00:28     Пустой конструктор без аргументов #7
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.08.2013, 00:43     Пустой конструктор без аргументов #8
Цитата Сообщение от Bend3r Посмотреть сообщение
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
ты мой пост читал? Конструктор там стоит не "ради хорошего тона".
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
16.08.2013, 00:58     Пустой конструктор без аргументов #9
murtukov, вот тут похожий вопрос:
Стандартный векторный контейнер
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 12:44     Пустой конструктор без аргументов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
25.08.2013, 12:44  [ТС]     Пустой конструктор без аргументов #10
Спасибо всем, с вопросом разобрался. Тема для меня закрыта
Yandex
Объявления
25.08.2013, 12:44     Пустой конструктор без аргументов
Ответ Создать тему
Опции темы

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