Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2010, 11:52   #1
Lazio
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 113
По умолчанию Неявные данные в конструкторе.

Имеется класс точки и класс прямоугольника причем прямоугольник создается по одной точке явной p2 (член класса Rect) и неявной Point. Вот конструктор:

Код:
Rect::Rect(double dx, double dy):p2(dx,dy), Point(){

}
Хотелось бы узнать можно ли как то описать копирование неявной точки в конструкторе копии??? или только вариант ниже катит:

Код:
Rect::Rect(const Rect &r){
	this->p2=r.p2;
	
}
И ещё маленький вопрос объектно-ориентированный подход С++ не предполагает такоего использования:

Rect a(4,5) //создаем прямоугольник со сторонами 4 и 5
a.p2.move(3,1) //двигаем точку прямоугольника на 3 и 1. Вот тут всё конечно сработает, но насколько я понял мы не имеем права так обращаться?
Lazio вне форума Ответить с цитированием
Старый 12.04.2010, 11:57   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
но насколько я понял мы не имеем права так обращаться?
Это зависит от того, является-ли p2 приватным, публичным или защищенным членом класса. (в первом случае еще имеет значение, является функция, которая так обращается, другом класса)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 12.04.2010, 12:01   #3
Lazio
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 113
По умолчанию

p2 приватный

между классами Rect и Point наследование как public

Последний раз редактировалось Stilet; 12.04.2010 в 12:19.
Lazio вне форума Ответить с цитированием
Старый 12.04.2010, 12:36   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Т.е. Rect - потомок Point ?Насколько я помню, потомки не имеют доступа к приватным членам предков, по крайней мере если вы наследуете как public, хотя могу и ошибаться. Самый простой способ проверить - проверить на практике, если не имеете права обращаться, то вылетит ошибка.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 12.04.2010, 12:53   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

потомки не могут обращаться к private полям класса. Только если поля обьявлены как public или protected. Причем поля класса не рекомендуется делать public. Поля должны быть либо private либо protected. В больших проектах советуют использовать вместо private именно protected, так как потом можно будет легко добавить производный класс и не париться переписывать методы родного класса.

Код:
 a.p2.move(3,1)
Это не будет работать, так как p2 - приватное поле. Чтобы обращаться к этой переменной надо в классе Rect сделать public метод, который вернет эту точку:
Код:
Point getP2()  { return p2; }
тогда её можно будет передвинуть так:
Код:
a.getP2().move(3,1);

Последний раз редактировалось NiCola999; 12.04.2010 в 12:57.
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор в конструкторе Юра_YUYU Общие вопросы C/C++ 3 30.01.2010 15:32
В конструкторе выделяется память под массив. Как быть с перегрузкой оператора = ? TwiX Общие вопросы C/C++ 6 15.12.2009 12:18
Как задать onClick в конструкторе? TwiX Общие вопросы Delphi 4 03.10.2009 20:39
Задать разрядность числа в конструкторе zx11 Общие вопросы C/C++ 5 19.08.2009 19:01
Инициализация массивов в конструкторе. jojahti Общие вопросы C/C++ 7 27.07.2009 13:30