Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 8.10. Указатели на константные объекты






1: // Листинг 8.10.

2: // Вызов константных методов с помощью указателей

3:

4: flinclude < iostream.h>

5:

6: class Rectangle

7: {

8: public:

9: Rectangle();

10: ~Rectangle();

11: void SetLength(int length) { itsLength = length; }

12: int GetLength() const { return itsLength; }

13: void SetWidth(int width) { itsWidth = width: }

14: int GetWidth() const { return itsWidth; }

15:

16: private:

17: int itsLength;

18: int itsWidth;

19: };

20:

21: Rectangle:: Rectangle()

22: {

23: itsWidth = 5;

24: itsLength = 10;

25: }

26:

27: Rectangle:: ~Rectangle()

28: { }

29:

30: int main()

31: {

32: Rectangle* pRect = new Rectangle;

33: const Rectangle * pConstRect = new Rectangle;

34: Rectangle * const pConstPtr = new Rectangle;

35:

36: cout < < " pRect width; " < < pRect-> GetWidth() < < " meters\n";

37: cout < < " pConstRect width: " < < pConstRect-> GetWidth() < < " meters\n";

38: cout < < " pConstPtr width: " < < pConstPtr-> GetWidth() < < " meters\n";

39:

40: pRect-> SetWidth(10);

41: // pConstRect-> SetWidth(10);

42: pConstPt r-> SetWidth(10); 43:

44: cout < < " pRect width: " < < pRect-> GetWidth() < < " meters\n";

45: cout < < " pConstRect width: " < < pConstRect-> GetWidth() < < " meters\n";

46: cout < < " pConstPtr width: " < < pConstPtr-> GetWidth() < < " meters\n";

47: return 0;

48: }

 

Результат:

pRect width: 5 meters

pConstRect width: 5 meters

pConstPtr width: 5 meters

pRect width: 10 meters

pConstRect width: 5 meters

pConstPtr width: 10 meters

 

Анализ: В строках 6—19 приведено описание класса Rectangle. Обратите внимание, что метод GetWidth(), описанный в строке 14, имеет спецификатор const. Затем в строке 32 объявляется указатель на объект класса Rectangle, а в строке 33 — на константный объект этого же класса. Константный указатель pConstPrt описывается в строке 34.

В строках 36—38 значения переменных класса выводятся на экран.

Метод SetWidth(), вызванный для указателя pRect (строка 40), устанавливает значение ширины объекта. В строке 41 показан пример использования указателя pConstRect для вызова метода класса. Но, так как pConstRect является указателем на константный объект, вызов методов без спецификатора const для него недоступен, поэтому данная строка закомментирована. В строке 42 происходит вызов метода SetWidth() для указателя pConstPrt. Этот указатель константный и может ссылаться только на одну область памяти, однако сам объект константным не является, поэтому данная операция полностью корректна.

 

Рекомендуется: Проверяйте значения, возвращаемые

функцией malloc().

Защищайте объекты, которые не должны изменяться в программе, с помощью ключевого слова const в случае передачи их как ссылок.

Передавайте как ссылки те объекты, которые должны изменяться в программе. Передавайте как значения небольшие объекты, которые не должны изменяться в программе.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.