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

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

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

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

15.08.2013, 23:28. Просмотров 1105. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток.

Я сейчас в процессе изучения С++, читаю книгу Лафоре "Объектно-ориентированное программирование в С++". На странице 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);
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 23:28     Пустой конструктор без аргументов
Посмотрите здесь:

Объект класса без аргументов и с ними C++
Пустой конструктор C++
C++ Изменение параметров конструктора без аргументов
Как вывести строку, которая состоит из аргументов командной строки так, чтобы каждое слово выводилось без первого символа C++
C++ Конструктор без параметров
C++ Странный конструктор копирования или функция без имени?
Как вызвать конструктор с параметрами в конструкторе без параметров? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
15.08.2013, 23:46  [ТС]     Пустой конструктор без аргументов #3
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 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
Заблокирован
16.08.2013, 00:15     Пустой конструктор без аргументов #5
Пустой "снаружи" (т.е. без параметров) не означает, что он пустой "внутри". Он может занести значения в поля объекта, создать другие объекты. Вообще, задача конструктора - сделать из куска выделенной памяти "правильно проинициализированный объект"

Сгенерированный автоматически - просто заглушка, ничего не делающая (чтобы его можно было вызвать).
Kuzia domovenok
1888 / 1743 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
16.08.2013, 00:16     Пустой конструктор без аргументов #6
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
неправда. он не генерируется самостоятельно.
точнее генерируется только, если иных конструкторов не определено.
В твоём же случае при наличии card (int n, int s) СГЕНЕРИРОВАННЫХ конструкторов по умолчанию не будет, т.к. подразумевается, что ты определил, что объект класса должен создаваться только, принимая 2 аргумента.
Чтобы всё же можно было конструировать объекты по-умолчанию, конструктор по-умолчанию ты обязан объявить явно!
Bend3r
148 / 135 / 18
Регистрация: 29.07.2012
Сообщений: 709
16.08.2013, 00:28     Пустой конструктор без аргументов #7
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
Kuzia domovenok
1888 / 1743 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
16.08.2013, 00:43     Пустой конструктор без аргументов #8
Цитата Сообщение от Bend3r Посмотреть сообщение
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
ты мой пост читал? Конструктор там стоит не "ради хорошего тона".
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6366 / 3013 / 297
Регистрация: 04.12.2011
Сообщений: 8,107
Записей в блоге: 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++
Создание метода без класса и аргументов разве нельзя ? C++
C++ Как принять заранее неизвестное количество аргументов и передать их в конструктор?

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

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

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