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

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

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

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

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

Как написать конструкторы копирования, инициализации и конструктор без аргументов? - C++
Как написать конструкторы копирования, инициализации и конструктор без аргументов? Вот код #include <iostream> using namespace...

Пустой конструктор - C++
class Test{ public: Test(){ //... } ~Test(){ //... } private: //...

Передача аргументов в конструктор - C++
У меня есть в классе конструктор по умолчанию: Port(const char * br = "none",const char * st = "none",int b = 0); Я создал производный...

Как принять заранее неизвестное количество аргументов и передать их в конструктор? - C++
Допустим есть функция которая создает объект template<typename T> T* createObject(typename ...params) { return new...

Объект класса без аргументов и с ними - C++
Доброго времени суток. Можно ли сделать так, чтобы: 1. объект класса, вызванный без аргументов, возвращал некое значение, которое в нем...

Изменение параметров конструктора без аргументов - C++
Как в конструкторе без параметров изменить значения из функции main?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
15.08.2013, 23:46  [ТС] #3
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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];
}
2
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,029
Записей в блоге: 1
16.08.2013, 00:15 #5
Пустой "снаружи" (т.е. без параметров) не означает, что он пустой "внутри". Он может занести значения в поля объекта, создать другие объекты. Вообще, задача конструктора - сделать из куска выделенной памяти "правильно проинициализированный объект"

Сгенерированный автоматически - просто заглушка, ничего не делающая (чтобы его можно было вызвать).
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
16.08.2013, 00:16 #6
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
неправда. он не генерируется самостоятельно.
точнее генерируется только, если иных конструкторов не определено.
В твоём же случае при наличии card (int n, int s) СГЕНЕРИРОВАННЫХ конструкторов по умолчанию не будет, т.к. подразумевается, что ты определил, что объект класса должен создаваться только, принимая 2 аргумента.
Чтобы всё же можно было конструировать объекты по-умолчанию, конструктор по-умолчанию ты обязан объявить явно!
2
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
16.08.2013, 00:28 #7
Цитата Сообщение от murtukov Посмотреть сообщение
dremer, но если он генерируется самостоятельно, то зачем его писать (имею ввиду пустой конструктор)?
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
16.08.2013, 00:43 #8
Цитата Сообщение от Bend3r Посмотреть сообщение
Правило хорошего тона, знаете? Допустим в main можно делать return, кому-то нужно, кому-то нету.
ты мой пост читал? Конструктор там стоит не "ради хорошего тона".
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
16.08.2013, 00:58 #9
murtukov, вот тут похожий вопрос:
Стандартный векторный контейнер
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
25.08.2013, 12:44  [ТС] #10
Спасибо всем, с вопросом разобрался. Тема для меня закрыта
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 12:44
Привет! Вот еще темы с ответами:

Создание метода без класса и аргументов разве нельзя ? - C++
Всем доброго времени суток. А разве нельзя создать обычный метод под main без аргументов типа того Ошибка error C3861: LAB5_1_8:...

Конструктор без параметров - C++
class stack { private: int top; // вершина стека int s; // массив в котором хранится стек public: stack (): top(0)...

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

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


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

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

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