Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.06.2022
Сообщений: 6

Работа конструктора

23.06.2022, 08:33. Показов 1024. Ответов 13

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу помочь разобраться с конструктором - на выходе должен сработать конструктор по умолчанию и конструктор с параметрами. Но почему-то не срабатывает, т.е. в консоли на печать выходит объект "man", а "man1" с инициализированными полями - нет.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
using namespace std;
 
struct Date
{
    int day;
    int month;
    int year;
    Date() : day{ 0 }, month{ 0 }, year{ 0 } {}
    Date(int dayP, int monthP, int yearP) : day {dayP}, month{monthP}, year {yearP} {}
};
 
class Human
{
    char* name;
public:
    char* inn;
    Date date;
 
    const char* getName() { return name; };
    void setName(const char* name);
 
 
    Human() : Human{ nullptr, nullptr, 1, 1, 1970 } //конструктор по умолчанию
    {
        cout << "Конструктор по умолчанию" << endl;
    }   
    
    Human (const char* nameP, const char* innP, int day, int month, int year) : //конструктор с параметрами
    name{name ? new char[strlen(nameP) + 1] : nullptr},
    inn { innP ? new char[strlen(innP) + 1] : nullptr },
    date {day, month, year} 
{
    if (name)
    {
        strcpy_s(name, strlen(nameP) + 1, nameP);
    }
    if (inn)
    {
        strcpy_s(inn, strlen(innP) + 1, innP);
    }
        std::cout << "Конструктор c параметрами" << endl;
    
}
 
~Human()   //деструктор
{
    delete[] name;
    delete[] inn;
    cout << "Деструктор сработал" << endl;
}
void print() 
    {
    if (name)
    {
        cout << "Имя: " << name << endl
            << "ИНН: " << inn << endl;
        cout << "Дата рождения: " << date.day << "." << date.month << "." << date.year << endl;
    }
    else cout << "что-то не так..." << endl;
    }
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    Human man;
    man.print();
 
    Human man1{ "Иван Иванов", "123-123-12300", 14, 5, 1990 };
    man1.print();
 
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2022, 08:33
Ответы с готовыми решениями:

Работа в теле конструктора
constructor Account::Account(int initialBalance) { if (initialBalance &gt;= 0) balance = initialBalance; if (initialBalance &lt;=...

Неккоректная работа конструктора с template
Здраствуйте, недавно начал работать с template в C++. Попробовал реализовать простенький класс матрицы, конструктор которой принимает в...

Работа с классом без конструктора
Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы. Написать...

13
фрилансер
 Аватар для Алексей1153
6434 / 5629 / 1126
Регистрация: 11.10.2019
Сообщений: 14,969
23.06.2022, 08:50
Лучший ответ Сообщение было отмечено _tasha_ как решение

Решение

Цитата Сообщение от _tasha_ Посмотреть сообщение
name{nameP ? new char[strlen(nameP) + 1] : nullptr},
тут, видимо, нужно подправить идентификатор

а потом заменить char* на std::string и радоваться жизни
1
23.06.2022, 08:59

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
а потом заменить char* на std::string и радоваться жизни
А с преподавателем что делать ? Концы в воду ? )

0
0 / 0 / 0
Регистрация: 23.06.2022
Сообщений: 6
23.06.2022, 09:07  [ТС]
О божечки, спасибо! Весь день потратила вчера на поиск этой ошибки
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
23.06.2022, 09:23
_tasha_,
Code
1
2
3
4
5
$ g++ main.cpp -Wall -Wextra
main.cpp: In constructor 'Human::Human(const char*, const char*, int, int, int)':
main.cpp:31:10: warning: '*this.Human::name' is used uninitialized [-Wuninitialized]
   30 |     name{name ? new char[strlen(nameP) + 1] : nullptr},
      |          ^~~~
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.06.2022, 10:19
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это какая то бадяга.
Это делегирующий конструктор
0
Заблокирован
23.06.2022, 10:25
Цитата Сообщение от Croessmah Посмотреть сообщение
Это делегирующий конструктор
Да понял.
Практически никогда ими не пользуюсь. Не потому что не знаю. А в силу их , кхм, логической неприменимости, ненадобности и дополнительная возможность расставить граблей побольше.
0
23.06.2022, 10:26

Не по теме:

SmallEvil, как раз всё наоборот - очень полезная весчь

0
Заблокирован
23.06.2022, 10:36
Вот и глаз замылился...

Добавлено через 7 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Это делегирующий конструктор
До С++11 это просто безымянный объект.

Добавлено через 2 минуты
Но так как используются инициализация через фигурные скобки, которые появились в С++11, то можно сказать что все соблюдено.

Добавлено через 6 секунд
Но так как используются инициализация через фигурные скобки, которые появились в С++11, то можно сказать что все соблюдено.
0
0 / 0 / 0
Регистрация: 23.06.2022
Сообщений: 6
23.06.2022, 10:43  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Практически никогда ими не пользуюсь. Не потому что не знаю. А в силу их , кхм, логической неприменимости, ненадобности и дополнительная возможность расставить граблей побольше.
Это задание, поэтому нравится-не нравится, а работу сдать надо. Но, честно говоря, сама пока смысла в них не вижу... возможно, в силу неопытности.
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
23.06.2022, 10:53
_tasha_, в задании так и было сказано, использовать делегирующий конструктор?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
23.06.2022, 10:57
_tasha_,
Цитата Сообщение от Azawa Посмотреть сообщение
делегирующий конструктор
думаю использовать конструктор по умолчанию и список инициализации будет эффективней.
0
23.06.2022, 11:13

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
До С++11 это просто безымянный объект.
В C вообще конструкторов не было...

0
0 / 0 / 0
Регистрация: 23.06.2022
Сообщений: 6
23.06.2022, 11:28  [ТС]
Цитата Сообщение от Azawa Посмотреть сообщение
использовать делегирующий конструктор?
конструктор с параметрами, конструктор по умолчанию, конструктор копирования
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.06.2022, 11:28
Помогаю со студенческими работами здесь

Не понятна работа конструктора копирования
Добрый день! Читаю Шилдта базовый курс. Дошел до конструктора копии.В книжных примерах вроде все понятно было. Перешел на перегрузку...

Работа конструктора копирования по умолчанию
Может кто объяснить, как конструктор копирования по умолчанию копирует символьный массив (не динамический). В теории он просто должен...

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать?
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их существенное отличие и какой плюс от использования перемещающего...

Работа с переменными конструктора. Объясните
Для примера: public class AplleBag { public AplleBag(int apllesCount){} } Есть такой шаблон, по нему создаю объекты в...

Почему при вызове конструктора из конструктора нельзя передавать this как аргумент?
Есть такой код: public class Order { { } Order(){ this(this.hashCode());//ошибка тут } ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru