|
Программирование >> Расширенная версия языка c++
УлраЖнени 1. Дан следующий базовый класс: class area cl { ,i public: double height; double width; i создайте два производных класса ngle и isosceles, которые наследуют базовый класс агеа с1. Каждый класс должен включать в себя функцию агеа(), которая возвращает площадь соответственно прямоугольника (rectangle) и равнобедренного треугольника (isosceles). Для инициализации переменных height и width (высота и длина основания, соответственно) используйте конструктор с параметрами. 2.4. Указатели на объекты До сих пор вы осуществляли доступ к членам объекта с помощью оператора точка (.). Если вы работаете с объектом, то это правильно. Однако доступ к члену объекта можно получить также и через указатель на этот объект. В этом случае обхчно применяется оператор стрелка (->). (Аналогичным способом оператор стрелка (->) используется при работе с указателем на структуру.) Вы объявляете указатель на объект точно так же, как и указатель на переменную любого другого типа. Задайте имя класса этого объекта, а затем имя переменной со звездочкой перед ним. Для получения адреса объекта перед ним необходим оператор &, точно так же, как это делается для получения адреса переменной другого типа. Как и для любого другого указателя, если вы указатель на объект, он будет указывать на следующий объект такого же типа. Примеры, 1. Простой пример использования указателя на объект: #include <iQstreain> . using namespace std; Производным классам предоставляется возможность обеспечения тех характеристик, которые являются характерными в каждом конкретном случае. Эта программа раскрывает другой важный аспект наследования: производные классы не владеют базовым классом безраздельно. Он может наследоваться любым количеством классов. clas lass { -.j j,; j,;. , .tj- .i . int a; . ., -,- , л - -.л... ... ... ... - public: myclass (intx) ; конструктор int get ( } ; \\i - . \i - . . myclass: :myclass(int x) { ;: . a = x; . ) ,. H > , int myclass: :get () return a; int mainO myclass ob(120); создание объекта myclass *p; создание указателя на объект . р передача адреса ob в р cou Значение, получаемое через объект: ob.getO; cout \n ; cou Значение, получаемое через указатель : p->get \ ) ; return t я . . . Отметьте, как объявление myclass *р; создает указатель на объект класса lass. Это важно для понимания следующего положения: создание указателя на объект не создает объекта, оно создает только указатель на него. Для передачи адреса объекта ob в переменную р, использовалась инструкция: р = sob; И последнее, в программе показано, как можно получить доступ к членам объекта с помощью указателя на этот объект. Мы вернемся к обсуждению указателей на объекты в главе 4, когда у вас уже будет более полное представление о C++. 2.5 ссы, структуры и объединения Как вы уже заметили, синтаксически класс похож на структуру. Вас, возможно, удивило то, что класс и структура имеют фактически одинаковые свойства. В C++ определение структуры расширили таким образом, что туда, как и в определение класса, удалось включить функции-члены, в том числе конструкторы и деструкторы. Таким образом, единственным отличием между структурой и классом является то, что члены класса, по умолчанию, являются закрытыми, а члены структуры - открытыми. Здесь показан расширенный синтаксис описания структуры: struct типа { шхче функции и данн1е - лен1 класса private: / / закрытие жции и данные - &Ю1 класса } список оЛвектов Таким образом, в соответствии с формальнхм синтаксисом C++ как структура, так и класс создают новые типы данных. Обратите внимание на введение нового ключевого слова. Им является слово private, которое сообщает компилятору, что следующие за ним члены класса являются закрытыми. В том, что структуры и классы обладают фактически одинаковыми свойствами, имеется кажущаяся избыточность. Те, кто только знакомится с C++, часто удивляются этому дублированию. При таком взгляде на проблему уже не кажутся необычными рассуждения о том, что ключевое слово class совершенно лишнее. Объяснение этому может быть дано в строгой и мягкой формах. Строгий довод состоит в том, что необходимо поддерживать линию на совместимость с С. Стиль задания структур С совершенно допустим и для программ C++. Поскольку в С все члены структур по умолчанию открыты, это положение также поддерживается и в C++. Кроме этого, поскольку класс синтаксически отличается от структуры, определение класса открыто для развития в направлении, которое в конечном итоге может привести к несовместимости со взятым из С определением структуры. Если эти два пути разойдутся, то направление, связанное с C++, уже не будет избыточным. Мягким доводом в пользу наличия двух сходных конструкций стало отсутствие какого-либо ущерба от расширения определения структуры в C++ таким образом, что в нее стало возможным включение функций-членов. Хотя структуры имеют схожие с классами возможности, большинство программистов ограничивают использование структур взятыми из С формами и не применяют их для задания Для задания объекта, содер- жащего данные и код, эти программисты обычно указывают ключевое слово class. Однако все это относится к стилистике и является предметом вашего собственного выбора. (Далее в книге за исключением текущего раздела с
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |