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

Абстрактный класс. Вывод

11.07.2017, 16:15. Показов 933. Ответов 2

Author24 — интернет-сервис помощи студентам
Ниже приведён код и использованием абстрактного базового класса. В конструкторе Translator() инициализирован год рождения int Birth. В теле пытаюсь поменять значение вот таким образом
Translator per1;
per1.Birth = 1234;
Компилятор не ругается, программа запускается, но выводит всё равно то, что в конструкторе.


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
#include "stdafx.h"
#include <string>
#include <iostream>
#include <locale.h>
using namespace std;
 
class Human    // базовый класс человек
{
public:
 
    string Lastname;
    string Firstname;
    int Birth;
    
 
    virtual void show() = 0; //виртуальная функция
};
class Translator : public Human        // наследуемый класс переводчик
{
private:
 
    string Lang1; // язык
    
public:
    Translator() //конструктор
    {
        Lang1 = "Русский";
        Lastname = "Петрович ";
        Firstname = "Пётр";
        Birth = 1978;
    }
 
    void show()
    {
        cout << Lastname << Firstname << endl;
        cout << "Я владею языком: " << Lang1 << endl;
    cout << "Год рождения: " << Birth << endl;
    
    }
};
class Programmer : public Human        // наследуемый класс программист
{
private:
 
    string ProgLang1; //язык программирования
    
 
public:
    Programmer() // конструктор
    {
        ProgLang1 = "С++";
        Lastname = "Иванов ";
        Firstname = "Иван";
        Birth = 1981;
    }
 
    void show()
    {
        cout << Lastname << Firstname << endl;
        cout << "Я владею языками: " << ProgLang1 << endl;
        cout << "Год рождения: " << Birth << endl;
    
 
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "rus");
 
 
    //Human* phum;
    Translator* ptrans = new Translator;
    Programmer* pprog = new Programmer;
 
    
    Human* mas[2]; //массив указателей
    mas[0] = ptrans;
    mas[1] = pprog;
 
    Translator per1;
    per1.Birth = 1234; //ВОПРОС: Как вывести это?
 
    mas[0]->show(); //(???) Почему не выводится Год рождения: 1234
 
    
    while (1);
}
Миниатюры
Абстрактный класс. Вывод  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2017, 16:15
Ответы с готовыми решениями:

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... ...

Разработать абстрактный класс класс Point для задания координаты
Народ, не буду врать на подобии &quot;помогите, не понимаю как сделать&quot; и т.п., говорю как есть, у меня...

Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра.
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра....

Абстрактный класс, наследование, класс хранится в другом классе
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то...

2
2268 / 1761 / 739
Регистрация: 27.07.2012
Сообщений: 5,233
11.07.2017, 16:20 2
Цитата Сообщение от elinastein Посмотреть сообщение
Почему не выводится Год рождения: 1234
Потому что выводишь другой объект.
Цитата Сообщение от elinastein Посмотреть сообщение
ВОПРОС: Как вывести это?
C++
1
per1.show();
0
Рэмбо комнатный
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
11.07.2017, 18:04 3
elinastein, конструкторы разбери, чувак
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
#include <string>
#include <vector>
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
class human
{
private:
    string last_name;
    string first_name;
    int birth_date;
public:
    human() { first_name = last_name = ""; birth_date = 0; }
    human(string fname, string lname, int bd)
    {
        first_name = fname; last_name = lname;
        birth_date = bd;
    }
    string get_first_name() { return first_name; }
    string get_last_name() { return last_name; }
    int get_birth_date() { return birth_date; }
    virtual string show_info() { return ""; }
};
 
class translator :public human
{
private:
    string language;
public:
    translator() :human() { language = ""; }
    translator(string fname, string lname, int bd, string lan) :human(fname, lname, bd)
    {
        language = lan;
    }
    string show_info()
    {
        return
            "\n" + (string)"First ame: " + get_first_name() +
            "\n" + "Last name: " + get_last_name() +
            "\n" + "Birth date: " + to_string(get_birth_date()) +
            "\n" + "Language: " + language;
    }
};
 
class programmer :public human
{
private:
    string programm_language;
public:
    programmer() :human() { programm_language = ""; }
    programmer(string fname, string lname, int bd, string lan) :human(fname, lname, bd)
    {
        programm_language = lan;
    }
    string show_info()
    {
        return 
            "\n\t" + (string)"First ame: " + get_first_name() +
            "\n\t" + "Last name: " + get_last_name() +
            "\n\t" + "Birth date: " + to_string(get_birth_date()) +
            "\n\t" + "Programm language: " + programm_language;
    }
};
 
class contain
{
private:
    vector<human*> con;
public:
    contain() {}
    ~contain() { con.clear(); }
    void push_back(human *temp) { con.push_back(temp); }
    void show_human()
    {
        for (int i = 0; i < con.size(); i++)
        {
            cout << con[i]->show_info() << endl;
        }
    }
};
 
int main(void)
{
    setlocale(0, "");
    translator *ob_1 = new translator("Пётр", "Петрович ", 1978, "Русский");
    programmer *ob_2 = new programmer("Иван", "Иванов", 1981, "С++");
    contain list;
    list.push_back(ob_1); list.push_back(ob_2);
    list.show_human();
    delete ob_1, ob_2;
    system("pause");
    return 0;
}
Добавлено через 1 минуту
и чтобы менять тело, лучше допиши методы класса, типа
C++
1
void set_birth_date(int date) ...
0
11.07.2017, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2017, 18:04
Помогаю со студенческими работами здесь

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать...

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ...
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на...

Абстрактный класс/Класс интерфейс
Не ловлю суть в чем разница между интерфейсом и абстрактным классом. И там и там у методов нету...

Создать класс - данные - абстрактный базовый класс. Создать производные классы
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс....

абстрактный класс
Всем привет, снова я, только уже с новым вопросом, а что такое абстрактный класс. Читаю книгу, не...

Абстрактный класс
Друзья, подскажите пожалуйста. Как, вот в этом примере с виртуальной функцией, реализовать уже как...


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

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

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