Программирование >>  Расширенная версия языка c++ 

1 ... 16 17 18 [ 19 ] 20 21 22 ... 227


УлраЖнени

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. Однако все это относится к стилистике и является предметом вашего

собственного выбора. (Далее в книге за исключением текущего раздела с



1 ... 16 17 18 [ 19 ] 20 21 22 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика