Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
1

Делегирующий конструктор

20.02.2016, 11:50. Показов 2009. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <string>
 
 
using namespace std;
 
class SomeClass
{
private:
    string str;
    unsigned un = 0;
    double dbl = 0.0;
 
public:
    SomeClass(string s, unsigned unsgn, double d):
              str(s), un(unsgn), dbl(d)
    { cout << "Конструктор 3 параметра!\n"; }
 
    SomeClass(): SomeClass("", 0, 0.0)
    { cout << "Пустой конструктор!\n"; }
 
    SomeClass(string ss): SomeClass(ss, 0, 0.0)
    { cout << "Конструктор 1 параметр (строка)\n"; }
 
    SomeClass(iostream& is): SomeClass()
    {
        cout << "Конструктор с потоком!\n";
        cin >> str;
    }
};
 
//==============================================
 
int main ()
{
    setlocale (LC_ALL, "Rus");
 
    SomeClass(cin);
 
    return 0;
}
При выполнении программы тело конструктора с параметром (istream&) игнорируется, то есть выполняются 2 конструктора (пустой и с 3 параметрами) и их тела, но игнорируется тело конструктора с потоком в качестве аргумента.. Почему?(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2016, 11:50
Ответы с готовыми решениями:

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор)
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1)...

5
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
20.02.2016, 12:01 2
Lawliet1, попробуй принимать istream& в качестве параметра.

Добавлено через 2 минуты
так вроде работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <string>
 
 
using namespace std;
 
class SomeClass
{
private:
    string str;
    unsigned un = 0;
    double dbl = 0.0;
 
public:
    SomeClass(string s, unsigned unsgn, double d):
              str(s), un(unsgn), dbl(d)
    { cout << "Конструктор 3 параметра!\n"; }
 
    SomeClass(): SomeClass("", 0, 0.0)
    { cout << "Пустой конструктор!\n"; }
 
    SomeClass(string ss): SomeClass(ss, 0, 0.0)
    { cout << "Конструктор 1 параметр (строка)\n"; }
 
    SomeClass(istream& is): SomeClass()
    {
        cout << "Конструктор с потоком!\n";
        cin >> str;
    }
};
 
//==============================================
 
int main ()
{
    setlocale (LC_ALL, "Rus");
 
    SomeClass x(cin);
 
    return 0;
}
1
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
20.02.2016, 12:04  [ТС] 3
Добавлено через 1 минуту
вот это я затупил боже... и стыдно и смеяться хочется)))) да, все заработало)
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
20.02.2016, 12:08 4
а теперь глупый вопрос к умным людям. обычное конструирование объекта работает как ожидается
C++
1
2
SomeClass x(cin);  //  ok
SomeClass* x = new SomeClass(cin);  // тоже
а вот такая запись - нет
C++
1
SomeClass(cin);
почему?
0
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
20.02.2016, 12:14  [ТС] 5
Цитата Сообщение от Babysitter Посмотреть сообщение
SomeClass(cin);
Такая запись вызывается как конструктор без параметра...

Добавлено через 2 минуты
Хотя с другой стороны:
C++
1
SomeClass("string");
вызывает конструктор с 1 параметр (строка)
0
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
20.02.2016, 13:45 6
Цитата Сообщение от Babysitter Посмотреть сообщение
а вот такая запись - нет
C++
1
SomeClass(cin);
почему?
Потому что такая запись трактуется как
C++
1
SomeClass cin; // (объявляем переменную cin, типа SomeClass)
Лекарство: использовать uniform initialization:
C++
1
SomeClass{cin};
Или изменить контекст с неоднозначного, на однозначный, например так:
C++
1
2
3
foo(SomeClass(cin));
// или
auto c = SomeClass(cin);
Ну и это еще один камень в огород любителям понапрописывать using namespace std.
3
20.02.2016, 13:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2016, 13:45
Помогаю со студенческими работами здесь

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор производного класса требует конструктор предка
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube {...


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

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