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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eXPonent
45 / 45 / 2
Регистрация: 21.05.2012
Сообщений: 852
#1

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

24.05.2014, 07:45. Просмотров 345. Ответов 8
Метки нет (Все метки)

Добрый день, помогите разобраться
Обращение к члену 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
2452 / 1624 / 238
Регистрация: 24.11.2012
Сообщений: 3,999
24.05.2014, 08:32     Обращение к члену protected #2
1. Зачем группа студентов наследуется от студента?
2. Делайте get-метод и gpa - приватным полем.
zss
Модератор
Эксперт С++
6192 / 5795 / 1877
Регистрация: 18.12.2011
Сообщений: 14,805
Завершенные тесты: 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
45 / 45 / 2
Регистрация: 21.05.2012
Сообщений: 852
24.05.2014, 10:58  [ТС]     Обращение к члену protected #4
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Почему обращение к члену protected, сообщается ошибкой?
0x10
2452 / 1624 / 238
Регистрация: 24.11.2012
Сообщений: 3,999
24.05.2014, 11:03     Обращение к члену protected #5
Цитата Сообщение от eXPonent Посмотреть сообщение
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Можно текст задания? Не верю, что кто-то в здравом уме потребует наследование группы студентов от студента.
eXPonent
45 / 45 / 2
Регистрация: 21.05.2012
Сообщений: 852
24.05.2014, 19:35  [ТС]     Обращение к члену protected #6
Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).

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

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

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

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

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

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

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

Не по теме:

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

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