Заблокирован
1

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

31.12.2011, 12:45. Показов 1828. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Какой конструктор считается конструкторомм по умолчанию, которому НЕ ПЕРЕДАЮТСЯ НИКАКИЕ АРГУМЕНТЫ, или же и тот конструктор, КОТОРОМУ ЯВНО МОГУТ НЕ передаваться никакие аргументы также может считаться конструктором по умолчанию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.12.2011, 12:45
Ответы с готовыми решениями:

Можно ли записывать объект в вектор, еще в конструкторе?
Привет! Я хочу создать класс, в котором будет static вектор объектов этого же класса, и еще...

Инициализация полей структуры в конструкторе по-умолчанию класса
Всем привет! #include <string> #include <vector> #pragma once class StudentsList {...

Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
То есть честно говоря, вопрос так надо ставить: почему если конструктор встроенный, то можно...

Еще раз об операции new
Верно ли что если я, выделив память операцией new, а затем забыв вернуть ее соответствующим delete,...

18
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
31.12.2011, 12:50 2
Цитата Сообщение от thick_int Посмотреть сообщение
КОТОРОМУ ЯВНО МОГУТ НЕ передаваться никакие аргументы также может считаться конструктором по умолчанию?
это explicit constructor
0
Заблокирован
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);
конструктором по умолчанию?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
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
1
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
31.12.2011, 13:26 5
http://www.parashift.com/c++-f... l#faq-10.4
1
Заблокирован
31.12.2011, 14:04 6
Цитата Сообщение от thick_int Посмотреть сообщение
Является ли в данном случае конструктор
Time::Time(int = 0, int = 0, int = 0);
конструктором по умолчанию?
да, является
1
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
31.12.2011, 14:06 7
Цитата Сообщение от LosAngeles Посмотреть сообщение
да, является
те когда я буду вызывать конструктор с параметрами Time(1) он будет конструктором не по умолчанию, а когда Time() - по-умолчанию?
0
Заблокирован
31.12.2011, 14:26 8
Цитата Сообщение от alex_x_x Посмотреть сообщение
те когда я буду вызывать конструктор с параметрами Time(1) он будет конструктором не по умолчанию, а когда Time() - по-умолчанию?
в стандарте чётко написано, что если некоторый конструктор можно вызвать без параметра, то он является конструтором по умолчанию. Там нигде не говорится, что если такой конструктор был вызван с параметрами, то он лишается статуса "конструктора по умолчанию", так что если ктото скажет что тут вызывается конструктор по умолчанию:
C
1
Time(1)
то он не соврёт в данном случае
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
31.12.2011, 14:28 9
LosAngeles, так один и тот же метод может быть default и non-default в зависимости от параметров? это вообщем-то нонсенс
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
31.12.2011, 14:29 10
Цитата Сообщение от alex_x_x Посмотреть сообщение
LosAngeles, так один и тот же метод может быть default и non-default в зависимости от параметров? это вообщем-то нонсенс
Дык параметры конструктора по умолчанию,т.е. при вызове параметры могут default или non-default. Нонсес? Думаю, нет. Так почему конструктор не может быть default и non-default как параметры?
0
Заблокирован
31.12.2011, 14:33  [ТС] 11
Далее в учебнике нашел следующее:
Конструктор, предусматривающий значения по умолчанию для всех своих аргументов, является одновременно конструктором по умолчанию, т.е. конструктором, который может активироваться без аргументов. В классе может быть не более одного конструктора по умолчанию.

Таким образом, я пока понимаю, что конструктором по умоланию являяетя такой контруктор, который может вызываться без аргументов. При этом, совершенно не факт, что какие-то аргументы все же этому контруктору могут передаваться.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
31.12.2011, 14:34 12
Chelioss, ну тут смысловой коллапс - получается тип конструктора определяется не тем как он определен, а тем как его вызывают

судя по всему такой конструктор называется default constructor with n default argument
хотя это я на http://publib.boulder.ibm.com/... plr376.htm взял
0
Заблокирован
31.12.2011, 14:44 13
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну тут смысловой коллапс - получается тип конструктора определяется не тем как он определен, а тем как его вызывают
дефолтность конструктора не определяется тем как его вызывают, а тем фактом что его можно вызвать без аргументов
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
31.12.2011, 14:53 14
Стандартом допускается еще и третья форма конструктора по умолчанию - с многоточием в качестве единственного параметра.
1
Заблокирован
31.12.2011, 15:14  [ТС] 15
Мне вообще кажется, что если Myclass - это некоторый класс, то тогда конструктором по умолчанию будет такой конструктор, который вызывается при объявлении
C++
1
MyClass objClass;
Таким конструктором может быть и конструктор безз-каких либо параметров, но также им может быть и конструктор, реализуемыйй в виде функции, которой тем или иным способом передаются некоторые параметры.

Вроде правильно понимаю.
Поправьте, если ошибаюсь.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
31.12.2011, 15:18 16
У меня появился вопрос:
C++
1
MyClass objClass;
и
C++
1
MyClass objClass();
одно и тоже?
Недавно тему создавали и там была видна разница. Что-то говорили про то, что второй вариант для компилятора кажется как функция, но все равно не понятно.
Чем они отличаются?
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
31.12.2011, 15:29 17
Цитата Сообщение от thick_int Посмотреть сообщение
Мне вообще кажется, что если Myclass - это некоторый класс, то тогда конструктором по умолчанию будет такой конструктор, который вызывается при объявлении
C++
1
MyClass objClass;
Таким конструктором может быть и конструктор безз-каких либо параметров, но также им может быть и конструктор, реализуемыйй в виде функции, которой тем или иным способом передаются некоторые параметры.
Вроде правильно понимаю.
Поправьте, если ошибаюсь.
Вы ошибаетесь только в том, что не заглядываете в стандарт или в учебники. Там ровно это и сказано.
Вообще, забавляют дискуссии, где одни пишут в сообщениях по теме то, что вычитали в учебниках, а другие себя этим не утруждают, и смело пишут что на ум взбредет.
0
2554 / 1319 / 178
Регистрация: 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 ради эксперимента, можете хоть что вставить, я полагаю.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
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();
теперь сам скажи, чем они отличаются?)
1
31.12.2011, 16:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2011, 16:41
Помогаю со студенческими работами здесь

Ханойская башня еще раз
Ну ни как не могу понять.Объясните как тут рекурсия работает. #include &lt;iostream&gt; using...

Еще раз однонаправленные списки
Помогите пожалуйста, нацельте в нужном направлении. Есть такая задачка Есть классы фигур ...

Еще раз о vector и очистке памяти
Привет всем! Создаю консольное приложение в RAD Studio. Код: vector&lt;int&gt; IntVect;...

Подскажите еще раз пожалуйста, почему во 2 столбце не выводит слова?
#include &lt;stdio.h&gt; #include &quot;iostream&quot; int main(void) { setlocale(0,&quot;&quot;); unsigned short...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru