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

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

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

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

24.05.2014, 07:45. Просмотров 368. Ответов 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"

СБОЙ построения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 07:45     Обращение к члену protected
Посмотрите здесь:

Обращение к члену структуры - C++
В чем разница между: a-&gt;b и a.b

Обращение к члену связного списка - C++
Прошу помощи в решении Стоит задача обращения к члену связного списка(того списка что выводится на экран файлового менеджера),затем с...

Обращение потока к функции-члену класса - C++
Есть Класс MainWindow, функцией-членом которой выступает Reader(), при попытке обратиться поток к данной функции-члену из main'a через...

Обращение к приватному члену класса внутри пространства имён - C++
Здравствуйте. Вот у меня есть код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace...

protected или не protected : ) - C++
собстно не могу решить как поступить. есть абстрактный класс окошка, являющийся базовым для всех окошек. есть 3 варианта...

Доступ к статической переменной-члену - C++
Всем доброго время суток задали написать программу, в которой доступ к статической переменной-члену осуществляется с помощью статической...

Невозможно обратиться к private -члену - C++
Подскажите пожалуйста,в чем проблема, из-за создания объекта компилятор выдает ошибку. Класс Base-абстрактный #include &quot;stdafx.h&quot; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
24.05.2014, 08:32     Обращение к члену protected #2
1. Зачем группа студентов наследуется от студента?
2. Делайте get-метод и gpa - приватным полем.
zss
Модератор
Эксперт С++
6282 / 5885 / 1906
Регистрация: 18.12.2011
Сообщений: 15,096
Завершенные тесты: 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
49 / 49 / 2
Регистрация: 21.05.2012
Сообщений: 1,097
24.05.2014, 10:58  [ТС]     Обращение к члену protected #4
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Почему обращение к члену protected, сообщается ошибкой?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
24.05.2014, 11:03     Обращение к члену protected #5
Цитата Сообщение от eXPonent Посмотреть сообщение
по условию задачи требовалось использовать наследование дружественность не подойдёт.
Можно текст задания? Не верю, что кто-то в здравом уме потребует наследование группы студентов от студента.
eXPonent
49 / 49 / 2
Регистрация: 21.05.2012
Сообщений: 1,097
24.05.2014, 19:35  [ТС]     Обращение к члену protected #6
Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).

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

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

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

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

Как обратиться к члену класса - C++
Здравствуйте! Есть такой код: class ClassA { ... public: int t; }; class ClassB:public ClassA

PROTECTED - C++
есть два класса: class Base{ private: int age; }; class Derived: public Base{ .......

Доступ к функции-члену другого класса - C++
Каким образом можно получить доступ из одного класса к функции члену другого класса???

Перегрузка оператора доступа к члену класса - C++
Как осуществляется перегрузка оператора доступа к члену класса? Если можно, то приведите пример

Не могу получить доступ к члену класса - C++
Недавно начал изучать C++ и SDL и появилась проблема с кодом. Я могу создать поверхность(см. код) с помощь thisFunctionWoks, но не могу...


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

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

Не по теме:

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

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