Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 26.11.2011
Сообщений: 6

Проблемы с доступом к членам класса

26.11.2011, 18:25. Показов 1029. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется консольный проект, состоящий из 3-х файлов: main.cpp, Classes.h, Classes.cpp. В файлах Classes.h и Classes.cpp описан базовый класс UPoint (точка) и производный класс UCircle (окружность).


Файл Classes.h:

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
class UPoint{
 
protected:
 
    double x;
    double y;
 
    //x, y координаты точки
 
public:
 
    UPoint(double xSet, double ySet); //конструктор
 
};
 
class UCircle:public UPoint{
 
protected:
 
    double R; //радиус
 
public:
 
    UCircle(double xSet, double ySet, double R_Set); //конструктор
    bool PointInCircle(const UPoint& ptCheck) const; //функция, возвращающая true, 
        //если точка ptCheck лежит внутри окружности
 
};

Файл Classes.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Classes.h"
#include <cmath>
 
using namespace std;
 
UPoint::UPoint(double xSet, double ySet):x(xSet),y(ySet) {}
 
UCircle::UCircle(double xSet, double ySet, double R_Set):UPoint(xSet,ySet),R(R_Set) {}
 
bool UCircle::PointInCircle(const UPoint& ptCheck) const {
 
       double d=sqrt((x-ptCheck.x)*(x-ptCheck.x)+(y-ptCheck.y)*(y-ptCheck.y)); 
      //вычисление расстояния d между центром окружности и точкой
 
    if (d>R)
        return false;
    else
        return true;
 
}
Файл main.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Classes.h"
 
int main() {
 
    UPoint pt1(4,0); //точка с координатами x=4 и у=0
    UCircle cr1(0,0,3); //Окружность с центом в начале коорд. и радиусом 3
 
    cr1.PointInCircle(pt1);
 
    return 0;
 
}

При попытке скоипилировать проект выдаются сообщения об ошибках:

…\classes.cpp(14) : error C2248: 'UPoint::x' : cannot access protected member declared in class 'UPoint'.

То есть функция-член объекта производного класса (cr1) не может получить доступ к защищенным членам объекта базового класса (pt1).

Насколько я понял из теории, функция-член объекта производного класса должна иметь доступ к защищенным членам любого объекта базового класса. Почему у меня возникает такая ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2011, 18:25
Ответы с готовыми решениями:

Класс внутри класса с доступом к данным первого класса
Есть класс, он содержит в себе функции. Функций этих много и я решил, что было бы удобно их группировать, как-нибудь через структуры или...

Доступ к protected членам базового класса
Здравствуйте, форумчане! Ниже приведенный код при компиляции вызывает следующую ошибку: error C2248: 'Element::AddTo' : cannot access...

Проблемы с объявлением функции-члена класса
Доброго времени суток. Пишу программу, реализующую простые матричные операции (сложение, вычитание и прочее). Код: matrix.h class...

3
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
26.11.2011, 19:34
Цитата Сообщение от Lindeman1976 Посмотреть сообщение
Почему у меня возникает такая ошибка?
Ты пытаешься получить доступ к полю другого объекта. UCircle может получить доступ к полям х,у только для UCircle.
0
0 / 0 / 1
Регистрация: 26.11.2011
Сообщений: 6
26.11.2011, 21:57  [ТС]
Спасибо!

Правильно ли я понял, что доступ к защищенным полям x, y в другом объекте возможен только если оба объекта одного класса (UCircle)?

Тогда получается, что при доступе к полям в разных объектах нет разницы между секциями private и protected? Поскольку для разных объектов одного класса можно получить доступ и полям private.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.11.2011, 07:58
Цитата Сообщение от Lindeman1976 Посмотреть сообщение
только если оба объекта одного класса
Именно так.


Цитата Сообщение от Lindeman1976 Посмотреть сообщение
Поскольку для разных объектов одного класса можно получить доступ и полям private.
К приватным полям базового класса у дочерних классов нет. Для объектов одного класса между public и private разницы нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2011, 07:58
Помогаю со студенческими работами здесь

Доступ к членам класса класса
Всем привет. Вобщем есть базовый класс, и два производных. Пользователь вводит координаты нужно проверить факт пересечения одной фигуры с...

Доступ к членам класса
Объект класса не может получить доступ к своим переменным?

Доступ к членам класса
Есть два класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class CPerson { /*закрытые члены*/ private:...

Доступ к приватным членам класса
Хочу я иметь доступ к приватному члену класса. Зачем это надо - за рамками данной темы и не обсуждается. Вот упрощенный код класса: ...

Обращение к элементам, членам класса
Здравствуйте! Мне нужно выполнить задания из меню (в коде программы), но я не могу понять как обраться в функции к NodeElement *cur и к...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru