powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / protected переменная не доступна из класса наследника
15 сообщений из 15, страница 1 из 1
protected переменная не доступна из класса наследника
    #38149173
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
У меня есть два класса сPoint и cRectangular:
Код: plaintext
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.
class cPoint
{
public:
	cPoint(double, double);
	cPoint();
	~cPoint(void);
	double getLength(cPoint);
	double getX();
	double getY();
	void setX(double);
	void setY(double);
protected:
	int x;
	int y;
};

class cRectangular:public cPoint
{
public:
	cRectangular(double, double, double, double);
	cRectangular();
	~cRectangular();
	double Perimeter();
	bool isInside(cPoint);
	double Square();
	int rectIntecept(cRectangular);
private:
	double height;
	double width;
};



Внутри cRectangular реализован метод isInside:
Код: plaintext
1.
2.
3.
4.
bool cRectangular::isInside(cPoint point)
{
	return point.x>=x && point.x<=x1 && point.y>=y && point.y<=y1; // why is point.x\y inaccessible?
}



Вопрос в том, почему поля x и y класса сPoint не доступны в методе isInside класса cRectangular? Они ведь объявлены как protected в родительском классе сPoint, а значит должны быть доступны в классе наследнике cRectangular.

Заранее спасибо!
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149184
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте для теста написать this->x и this->y
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149264
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точный текст сообщения об ошибке можно? Лично меня здорово смущают x1 и y1.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149293
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_Gпочему поля x и y класса сPoint не доступны в методе isInside класса
cRectangular?
Потому что они принадлежат другому экземпляру. Protected поля не видны "снаружи" никому,
даже другим экземплярам того же класса. За исключением друзей, но это отдельная тема.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149302
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,
не доступны поля экземпляра point, переданного входным параметром в функцию. ну и что тут удивительного? это внешний, по отношению к cRectangular объект, никак не связанный с ним. и тот факт, что cRectangular наследуется от cPoint никак на это не влияет. Тем более, что в классе cPoint есть геттеры для этих полей, и какая религия запрещает их вам использовать, общественности не понятно
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149351
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMaximuS_Gпочему поля x и y класса сPoint не доступны в методе isInside класса
cRectangular?
Потому что они принадлежат другому экземпляру. Protected поля не видны "снаружи" никому,
даже другим экземплярам того же класса. За исключением друзей, но это отдельная тема.
Того же класса - видны.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class Base {
protected:
	int m_data;
public:
	static int getData(const Base& b) {return b.m_data;}
};

class Derived : public Base {
public:
	int getData(void) const {return m_data;};

	static int getBaseData(const Base& b) {return b.m_data;}//Ошибка.
	static int getDerivedData(const Derived& b) {return b.m_data;}
};

Странное ограничение, кстати. Реально, как можно видеть, ни от чего не защищает, а проблемы создаёт.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149707
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторDimitry SibiryakovMaximuS_Gпочему поля x и y класса сPoint не доступны в методе isInside класса
cRectangular?
Потому что они принадлежат другому экземпляру. Protected поля не видны "снаружи" никому,
даже другим экземплярам того же класса. За исключением друзей, но это отдельная тема.


Это не так в С++.
Это так только в smalltalk.

Тут члены должны быть доступны, автор просто что-то попутал.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149761
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто не так в С++.
Это так только в smalltalk.

Тут члены должны быть доступны, автор просто что-то попутал.Вот мне тоже казалось, что должны. Но студия 2010 в примере выше со мной не согласилась, причём именно с формулировкой "error C2248: 'Base::m_data' : cannot access protected member declared in class 'Base' ".
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149824
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionВот мне тоже казалось, что должны. Но студия 2010 в примере выше со мной
не согласилась
И что неприятно - BCC с ней солидарен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38149829
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAbstractionВот мне тоже казалось, что должны. Но студия 2010 в примере выше со мной
не согласилась
И что неприятно - BCC с ней солидарен.
Да как бы стандарт (2003, по крайней мере) с ней солидарен. Есть там такое мерзкое ограничение на доступ к protected-членам, логику которого я не вполне понимаю.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38150004
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не то.
Без доступа к защищенным членам других экземпляров нельзя реализовать конструктор копирования и присвоение.
Можно цитату из стандарта?
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38150012
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, все правильно.
Разрешен доступ к защищенным членам того же самого класса, но не к предку, даже если это предок из которого унаследованы эти члены.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38150046
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если конкретно по данному коду, то вот это нонсенс:
Код: plaintext
1.
class cRectangular:public cPoint


Наследование это отношение "является".
А прямоугольник никак не является точкой.
Исправьте это и сразу отпадет необходимость лезть во внутренности точки из кода прямоугольника.
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38150403
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо, теперь все понятно!
Anatoly Moskovsky Наследование это отношение "является".
А прямоугольник никак не является точкой.
Исправьте это и сразу отпадет необходимость лезть во внутренности точки из кода прямоугольника.
Такое домашнее задание задают :)
...
Рейтинг: 0 / 0
protected переменная не доступна из класса наследника
    #38152161
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
class A
{
firend class B;
protected:
int aa;
}

class B: public class A
{
}
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / protected переменная не доступна из класса наследника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]