Форум программистов, компьютерный форум CyberForum.ru

Обращение к члену protected - C++

Восстановить пароль Регистрация
 
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
24.05.2014, 07:45     Обращение к члену protected #1
Добрый день, помогите разобраться
Обращение к члену protected, сообщается ошибкой
Код класса:
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
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
struct FIO
{
    string surname;
    string name;
    string patronymic;
};
 
class student
{
    public:
        student()
        {
            cout << "Фамилия: ";
            cin >> initials.surname;
            cout << "Имя: ";
            cin >> initials.name;
            cout << "Отчество: ";
            cin >> initials.patronymic;
            cout << "Возраст: ";
            cin >> age;
            cout << "Курс: ";
            cin >> course;
            cout << "Успеваемость: ";
            cin >> GPA;
        };
        void print(bool _edit = false)
        {
            if(_edit) cout << "1) ";
            cout << "Фамилия: " << initials.surname << endl;
            if(_edit) cout << "2) ";
            cout << "Имя: " << initials.name << endl;
            if(_edit) cout << "3) ";
            cout << "Отчество: " << initials.patronymic << endl;
            if(_edit) cout << "4) ";
            cout << "Возраст: " << age << endl;
            if(_edit) cout << "5) ";
            cout << "Курс: " << course << endl;
            if(_edit) cout << "6) ";
            cout << "Успеваемость: " << GPA << endl;
        };
        void edit()
        {
            print(true);
            cout << "Редактировать поле номер: ";
            int N;
            cin >> N;
            switch (N)
            {
                case 1:
                    cout << "Фамилия: ";
                    cin >> initials.surname;
                break;
                case 2:
                    cout << "Имя: ";
                    cin >> initials.name;
                break;
                case 3:
                    cout << "Отчество: ";
                    cin >> initials.patronymic;
                break;
                case 4:
                    cout << "Возраст: ";
                    cin >> age;
                break;
                case 5:
                    cout << "Курс: ";
                    cin >> course;
                break;
                case 6:
                    cout << "Успеваемость: ";
                    cin >> GPA;
                break;
                default:
                    cout << "Ошибка редактирования!";
            };      
        };
 
    protected:
        double GPA;
 
    private:
        FIO initials;
        int age;
        int course;
};
 
class group_student: public student
{
    public:
        void push_back(student _stud)
        {
            stud.push_back(_stud);
        };
        void print()
        {
            for(int i = 0; i != stud.size(); i++)
            {
                number_student(i);
                stud[i].print();
            };                       
        };
        void edit(int i)
        {
            number_student(i-1);
            stud[i-1].edit();                   
        };
        void sort()
        {
            for(int i = 0; i != stud.size(); ++i) // i - номер текущего шага
            {
                int pos = i; 
                student _stud = stud[i];
                for(int j = i + 1; j != stud.size(); ++j) // цикл выбора max элемента
                    if (stud[j].GPA < _stud.GPA) 
                    {
                        pos = j; 
                        _stud = stud[j]; 
                    };
                stud[pos] = stud[i]; 
                stud[i] = _stud;
            };
        };
 
    private:
        vector<student> stud;
        inline void number_student(int i)
        {
            cout << "Студент №" << i << endl;
        };
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
 
// Тест
    group_student A;
    for(int i = 0; i != 5; i++)
    {
        student stud;
        A.push_back(stud);
    };
    A.sort();
    A.print();
 
    system("pause");
};
Ошибки:
Кликните здесь для просмотра всего текста
ClCompile:
Lab№3.cpp
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(119): error C2248: student::GPA: невозможно обратиться к protected член, объявленному в классе "student"
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(84): см. объявление "student::GPA"
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(14): см. объявление "student"
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(119): error C2248: student::GPA: невозможно обратиться к protected член, объявленному в классе "student"
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(84): см. объявление "student::GPA"
c:\documents and settings\artyr\рабочий стол\task№5\lab№3\lab№3.cpp(14): см. объявление "student"

СБОЙ построения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
24.05.2014, 08:32     Обращение к члену protected #2
1. Зачем группа студентов наследуется от студента?
2. Делайте get-метод и gpa - приватным полем.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
24.05.2014, 09:03     Обращение к члену protected #3
У Вас нет наследования, а только дружественность
C++
1
2
3
4
5
6
7
8
class student
{...
    friend class group_student;
};
 
class group_student
{
...
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
24.05.2014, 10:58  [ТС]     Обращение к члену protected #4
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Почему обращение к члену protected, сообщается ошибкой?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
24.05.2014, 11:03     Обращение к члену protected #5
Цитата Сообщение от eXPonent Посмотреть сообщение
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Можно текст задания? Не верю, что кто-то в здравом уме потребует наследование группы студентов от студента.
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
24.05.2014, 19:35  [ТС]     Обращение к члену protected #6
Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).

Добавлено через 1 час 48 минут
Есть у кого нибудь какая-то мысль, кроме Делать get-метод и gpa - приватным полем.

Добавлено через 5 часов 3 минуты
так почему не получается обратиться к члену protected??
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
24.05.2014, 21:26     Обращение к члену protected #7
Цитата Сообщение от eXPonent Посмотреть сообщение
protected:
double GPA;
Делать члены класса protected нехорошо.
protected применяют только для методов (обычно совместно с virtual)

Добавлено через 3 минуты
Цитата Сообщение от eXPonent Посмотреть сообщение
Есть у кого нибудь какая-то мысль
Цитата Сообщение от eXPonent Посмотреть сообщение
Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).
Послать преподователя на проверку профпригодности...

Добавлено через 5 минут
У "группы студентов" нет фамилии и отчества, что говорит об абсурдности идеи наследования.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
24.05.2014, 21:33     Обращение к члену protected #8
Цитата Сообщение от eXPonent Посмотреть сообщение
Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).
Пропиши преподу с ноги за такие задачи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 22:59     Обращение к члену protected
Еще ссылки по теме:

Невозможно обратиться к private -члену C++
Обращение потока к функции-члену класса C++
C++ Как обратиться к члену класса

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

Или воспользуйтесь поиском по форуму:
eXPonent
24.05.2014, 22:59  [ТС]     Обращение к члену protected
  #9

Не по теме:

Yandex
Объявления
24.05.2014, 22:59     Обращение к члену protected
Ответ Создать тему
Опции темы

Текущее время: 07:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru