0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 9
1

При наследовании конструктора string не записывается

05.03.2017, 13:43. Показов 723. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! В лабораторной необходимо наследовать конструктор. Вроде всё сделал, однако string переменные класса при использовании унаследованного конструктора пусты, а unsigned long записывается без проблем. set методы также записывают string без проблем, но я не могу понять что не так с наследуемым конструктором. Помогите разобраться как правильно сделать наследование чтобы конструктор записывал string поля. Код:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
#include <istream>
#include <math.h>
#include <string>
 
using namespace std;
 
class Employee
{
public:
    string name;
    string resp;
    unsigned long salary;
 
    Employee(){}
 
    Employee(string _name, string _resp, unsigned long _salary)
    {
        name = _name;
        resp = _resp;
        salary = _salary;
    }
 
    string getName(){ return name; }
    string getResp(){ return resp; }
    unsigned long getSalary(){ return salary; }
 
    void setName(string _name){ name = _name; }
    void setPost(string _resp){ resp = _resp; }
    void setSalary(unsigned long _salary){ salary = _salary; }
 
 
    virtual void show()
    {
        cout << "ФИО: " << name << endl;
        cout << "Обязанности: " << resp << endl;
        cout << "Зарплата: " << salary << endl;
    }
};
 
class Manager : public Employee
{
public:
    Manager(){};
    Manager(string _name, string _resp, unsigned long _salary) : Employee(_name, _resp, _salary){};
 
    void show()
    {
        cout << "Менеджер:" << endl;
        cout << "ФИО: " << name << endl;
        cout << "Обязанности: " << resp << endl;
        cout << "Зарплата: " << salary << endl;
 
    }
};
 
class Admin : public Employee
{
public:
    Admin(){};
    Admin(string _name, string _resp, unsigned long _salary) : Employee(_name, _resp, _salary){};
 
    void show()
    {
        cout << "Администратор:" << endl;
        cout << "ФИО: " << name << endl;
        cout << "Обязанности: " << resp << endl;
        cout << "Зарплата: " << salary << endl;
    }
};
 
class Programmer : public Employee
{
public:
    Programmer(){};
    Programmer(string _name, string _resp, unsigned long _salary) : Employee(_name, _resp, _salary){};
 
    void show()
    {
        cout << "Программист:" << endl;
        cout << "ФИО: " << name << endl;
        cout << "Обязанности: " << resp << endl;
        cout << "Зарплата: " << salary << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n=0, state=0;
    string name = "", resp = "";
    unsigned long sal = 0;
    cout << "Введите количество элементов массива: ";
    cin >> n;
    Employee **mas = new Employee*[n];
    for (int i = 0; i < n; i++)
    {
        cout << "Введите 1 чтобы добавить менеджера" << endl;
        cout << "Введите 2 чтобы добавить администратора" << endl;
        cout << "Введите 3 чтобы добавить программиста" << endl;
        cin >> state;
        switch (state)
        {
            case 1:
            {
                cout << "ФИО: ";
                cin >> name;
                cout << "Обязанности: ";
                cin >> resp;
                cout << "Зарплата: ";
                cin >> sal;
                mas[i] = &Manager(name, resp, sal);
                //mas[i]->show();
                //mas[i]->setName(name);
                //mas[i]->setPost(resp);
                break;
 
            }
            case 2:
            {
                cout << "ФИО: ";
                cin >> name;
                cout << "Обязанности: ";
                cin >> resp;
                cout << "Зарплата: ";
                cin >> sal;
                mas[i] = &Admin(name, resp, sal);
                break;
            }
            case 3:
            {
                cout << "ФИО: ";
                cin >> name;
                cout << "Обязанности: ";
                cin >> resp;
                cout << "Зарплата: ";
                cin >> sal;
                mas[i] = &Programmer(name, resp, sal);
                break;
            }
            default: break;
        }   
    }
 
    cout << "Созданный массив объектов:" << endl;
    for (int i = 0; i < n; i++)
    {
        mas[i]->show();
        //mas[i]
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2017, 13:43
Ответы с готовыми решениями:

Вызов конструктора при наследовании
Как вызывается конструктор класса наследующегося другим классом. public class A { public...

Правильное написание конструктора при наследовании
В общем вот проблема Есть класс: private class MyBtn extends JButton { public MyBtn() { ...

Что означает двоеточие в наследовании конструктора?
При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта:...

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

2
56 / 56 / 31
Регистрация: 24.10.2016
Сообщений: 186
05.03.2017, 15:09 2
Цитата Сообщение от vlad-29 Посмотреть сообщение
mas[i] = &Manager(name, resp, sal);
Цитата Сообщение от vlad-29 Посмотреть сообщение
mas[i] = &Admin(name, resp, sal);
Цитата Сообщение от vlad-29 Посмотреть сообщение
mas[i] = &Programmer(name, resp, sal);
Замените на mas[i] = new Programmer
1
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 9
12.03.2017, 14:06  [ТС] 3
Спасибо, помогло.
0
12.03.2017, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2017, 14:06
Помогаю со студенческими работами здесь

В переменную типа string записывается только первое слово строки
Как вписывать предложения в тип string (если возможно)? То есть скажем после string randomstr;...

Добавить в класс String реализацию конструктора копирования
Инвариант класса остается тем же (в size хранится размер строки без завершающего 0 символа, str...

Добавить в класс String реализацию конструктора копирования
Необходимо добавить в класс String реализацию конструктора копирования. Инвариант класса должен...

string обьявленый в классе передать в параметры конструктора
class String{ char str; string str2; public: String(char string){ strcpy(str,string);...

Не могу создать ссылку на переменную String с конструктора JFrame
Нужно создать ссылку в другом классе на переменную , которая находиться в &quot;public void...

Использование шаблонов при наследовании, ошибка при компиляции
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от...


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

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

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