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

Еще раз о конструкторе по умолчанию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
thick_int
Заблокирован
31.12.2011, 12:45     Еще раз о конструкторе по умолчанию #1
Какой конструктор считается конструкторомм по умолчанию, которому НЕ ПЕРЕДАЮТСЯ НИКАКИЕ АРГУМЕНТЫ, или же и тот конструктор, КОТОРОМУ ЯВНО МОГУТ НЕ передаваться никакие аргументы также может считаться конструктором по умолчанию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.12.2011, 12:50     Еще раз о конструкторе по умолчанию #2
Цитата Сообщение от thick_int Посмотреть сообщение
КОТОРОМУ ЯВНО МОГУТ НЕ передаваться никакие аргументы также может считаться конструктором по умолчанию?
это explicit constructor
thick_int
Заблокирован
31.12.2011, 13:14  [ТС]     Еще раз о конструкторе по умолчанию #3
Не совсем понятно. Попробую конкретизировать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Time
{
public:
    Time(int = 0, int = 0, int = 0);
    void setTime(int, int, int);
    void printUniersal();
    void printStandard();
private:
    int hour;
    int minute;
    int second;
};
Является ли в данном случае конструктор
C++
1
Time::Time(int = 0, int = 0, int = 0);
конструктором по умолчанию?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.12.2011, 13:20     Еще раз о конструкторе по умолчанию #4
A default constructor for a class X is a constructor of class X that can be called without an argument. If
there is no user-declared constructor for class X, a default constructor is implicitly declared. An implicitly-
declared default constructor is an inline public member of its class. A constructor is trivial if it is an
implicitly-declared default constructor and if:
— its class has no virtual functions (10.3) and no virtual base classes (10.1), and
— all the direct base classes of its class have trivial constructors, and
— for all the nonstatic data members of its class that are of class type (or array thereof), each such class has
a trivial constructor.
не думаю, что параметры по умолчанию можно трактовать как
can be called without an argument
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.12.2011, 13:26     Еще раз о конструкторе по умолчанию #5
http://www.parashift.com/c++-faq-lit....html#faq-10.4
LosAngeles
Заблокирован
31.12.2011, 14:04     Еще раз о конструкторе по умолчанию #6
Цитата Сообщение от thick_int Посмотреть сообщение
Является ли в данном случае конструктор
Time::Time(int = 0, int = 0, int = 0);
конструктором по умолчанию?
да, является
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.12.2011, 14:06     Еще раз о конструкторе по умолчанию #7
Цитата Сообщение от LosAngeles Посмотреть сообщение
да, является
те когда я буду вызывать конструктор с параметрами Time(1) он будет конструктором не по умолчанию, а когда Time() - по-умолчанию?
LosAngeles
Заблокирован
31.12.2011, 14:26     Еще раз о конструкторе по умолчанию #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
те когда я буду вызывать конструктор с параметрами Time(1) он будет конструктором не по умолчанию, а когда Time() - по-умолчанию?
в стандарте чётко написано, что если некоторый конструктор можно вызвать без параметра, то он является конструтором по умолчанию. Там нигде не говорится, что если такой конструктор был вызван с параметрами, то он лишается статуса "конструктора по умолчанию", так что если ктото скажет что тут вызывается конструктор по умолчанию:
C
1
Time(1)
то он не соврёт в данном случае
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.12.2011, 14:28     Еще раз о конструкторе по умолчанию #9
LosAngeles, так один и тот же метод может быть default и non-default в зависимости от параметров? это вообщем-то нонсенс
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
31.12.2011, 14:29     Еще раз о конструкторе по умолчанию #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
LosAngeles, так один и тот же метод может быть default и non-default в зависимости от параметров? это вообщем-то нонсенс
Дык параметры конструктора по умолчанию,т.е. при вызове параметры могут default или non-default. Нонсес? Думаю, нет. Так почему конструктор не может быть default и non-default как параметры?
thick_int
Заблокирован
31.12.2011, 14:33  [ТС]     Еще раз о конструкторе по умолчанию #11
Далее в учебнике нашел следующее:
Конструктор, предусматривающий значения по умолчанию для всех своих аргументов, является одновременно конструктором по умолчанию, т.е. конструктором, который может активироваться без аргументов. В классе может быть не более одного конструктора по умолчанию.

Таким образом, я пока понимаю, что конструктором по умоланию являяетя такой контруктор, который может вызываться без аргументов. При этом, совершенно не факт, что какие-то аргументы все же этому контруктору могут передаваться.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.12.2011, 14:34     Еще раз о конструкторе по умолчанию #12
Chelioss, ну тут смысловой коллапс - получается тип конструктора определяется не тем как он определен, а тем как его вызывают

судя по всему такой конструктор называется default constructor with n default argument
хотя это я на http://publib.boulder.ibm.com/infoce...%2Fcplr376.htm взял
LosAngeles
Заблокирован
31.12.2011, 14:44     Еще раз о конструкторе по умолчанию #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну тут смысловой коллапс - получается тип конструктора определяется не тем как он определен, а тем как его вызывают
дефолтность конструктора не определяется тем как его вызывают, а тем фактом что его можно вызвать без аргументов
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
31.12.2011, 14:53     Еще раз о конструкторе по умолчанию #14
Стандартом допускается еще и третья форма конструктора по умолчанию - с многоточием в качестве единственного параметра.
thick_int
Заблокирован
31.12.2011, 15:14  [ТС]     Еще раз о конструкторе по умолчанию #15
Мне вообще кажется, что если Myclass - это некоторый класс, то тогда конструктором по умолчанию будет такой конструктор, который вызывается при объявлении
C++
1
MyClass objClass;
Таким конструктором может быть и конструктор безз-каких либо параметров, но также им может быть и конструктор, реализуемыйй в виде функции, которой тем или иным способом передаются некоторые параметры.

Вроде правильно понимаю.
Поправьте, если ошибаюсь.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
31.12.2011, 15:18     Еще раз о конструкторе по умолчанию #16
У меня появился вопрос:
C++
1
MyClass objClass;
и
C++
1
MyClass objClass();
одно и тоже?
Недавно тему создавали и там была видна разница. Что-то говорили про то, что второй вариант для компилятора кажется как функция, но все равно не понятно.
Чем они отличаются?
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
31.12.2011, 15:29     Еще раз о конструкторе по умолчанию #17
Цитата Сообщение от thick_int Посмотреть сообщение
Мне вообще кажется, что если Myclass - это некоторый класс, то тогда конструктором по умолчанию будет такой конструктор, который вызывается при объявлении
C++
1
MyClass objClass;
Таким конструктором может быть и конструктор безз-каких либо параметров, но также им может быть и конструктор, реализуемыйй в виде функции, которой тем или иным способом передаются некоторые параметры.
Вроде правильно понимаю.
Поправьте, если ошибаюсь.
Вы ошибаетесь только в том, что не заглядываете в стандарт или в учебники. Там ровно это и сказано.
Вообще, забавляют дискуссии, где одни пишут в сообщениях по теме то, что вычитали в учебниках, а другие себя этим не утруждают, и смело пишут что на ум взбредет.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
31.12.2011, 16:25     Еще раз о конструкторе по умолчанию #18
Chelioss,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
float a()
{
    std::cout << "lalala" << std::endl;
    return 0.1;
}
 
int main()
{
    std::cout << a << std::endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
float a()
{
    std::cout << "lalala" << std::endl;
    return 0.1;
}
 
int main()
{
    std::cout << a() << std::endl;
}
Скомпильте оба. Можете еще этот
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
float a()
{
    std::cout << "lalala" << std::endl;
}
 
int main()
{
    std::cout << a << std::endl;
}
Float ради эксперимента, можете хоть что вставить, я полагаю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2011, 16:41     Еще раз о конструкторе по умолчанию
Еще ссылки по теме:

C++ Еще раз о vector и очистке памяти
Определить встречается ли значение i-го элемента еще раз в односвязном списке C++
C++ Еще раз про ссылки

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
31.12.2011, 16:41     Еще раз о конструкторе по умолчанию #19
Цитата Сообщение от Chelioss Посмотреть сообщение
У меня появился вопрос:
C++
1
MyClass objClass;
и
C++
1
MyClass objClass();
одно и тоже?
Недавно тему создавали и там была видна разница. Что-то говорили про то, что второй вариант для компилятора кажется как функция, но все равно не понятно.
Чем они отличаются?
Это даже близко не одно и то же.

1 - создание объекта класса MyClass
2 - прототип ф-ции без аргументов, которая возвращает объект типа MyClass

Добавлено через 4 минуты
Цитата Сообщение от Chelioss Посмотреть сообщение
Чем они отличаются?
Забудем про то, что есть какие то классы, будем говорить "тип данных". Непоспоришь, что int - это тип данных.
Так вот 2 записи:
C++
1
int func; //имя func для наглядности
и
C++
1
int func();
теперь сам скажи, чем они отличаются?)
Yandex
Объявления
31.12.2011, 16:41     Еще раз о конструкторе по умолчанию
Ответ Создать тему
Опции темы

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