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

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

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

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

15.08.2013, 23:28. Просмотров 1210. Ответов 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++
Как написать конструкторы копирования, инициализации и конструктор без аргументов? Вот код #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?

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Каратель
Эксперт С++
6553 / 3973 / 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
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
16.08.2013, 00:15     Пустой конструктор без аргументов #5
Пустой "снаружи" (т.е. без параметров) не означает, что он пустой "внутри". Он может занести значения в поля объекта, создать другие объекты. Вообще, задача конструктора - сделать из куска выделенной памяти "правильно проинициализированный объект"

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

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

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

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

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

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


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

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

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