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

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

26.11.2011, 18:25. Просмотров 667. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2011, 18:25
Ответы с готовыми решениями:

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

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

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

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

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

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

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


Цитата Сообщение от Lindeman1976 Посмотреть сообщение
Поскольку для разных объектов одного класса можно получить доступ и полям private.
К приватным полям базового класса у дочерних классов нет. Для объектов одного класса между public и private разницы нет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2011, 07:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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