Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Функции преобразования

Объекты класса могут быть преобразованы в другие типы с помощью конструкторов преобразования или операций приведения типа.

Конструкторы преобразования

Если конструктор класса А имеет единственный параметр типа В, то объект В может быть неявно преобразован в класс А с помощью такого конструктора. Другими словами, компилятор может сам вызывать такой конструктор, чтобы «из В сделать А». Возьмите пример из предыдущего раздела. Локальный объект можно было бы инициализировать по-другому:

class Hold

{

char *str;

public:

Hold(const char*);

//...

} ;

main ()

{

Hold mainObj = "This is a local object in main.";

//...

return 0;

}

Таким образом, в этом примере объявленный в классе конструктор Hold (const char*) является по сути конструктором преобразования.

Ключевое слово explicit

Можно запретить вызовы конструктора с одним параметром в качестве конструктора преобразования, объявив его с ключевым словом explicit. Тем самым будут запрещены неявные вызовы конструктора, подобные показанному в предыдущем параграфе:

class Hold

{

char *str;

public:

explicit Hold(const char*);

//. ..

};

main ()

{

//

// Неявное преобразование недопустимо: //

// Hold mainObj = "This is a local object in main.";

//. . .

return 0;

}

Такой конструктор можно вызывать только явным образом, т.е.

Hold mainObj ("This is a local object in main.");

или

Hold mainObj = Hold("This is a local object in main.");

Операции приведения

В классе можно определять элементы-функции, которые будут обеспечивать явное преобразование типа данного класса в другие типы. Эти функции называют операциями приведения или процедурами преобразования. Синтаксис их следующий:

operator имя_нового_типа();

Процедуры преобразования характеризуются следующими правилами:

  • У процедуры преобразования нет параметров.

  • Для процедуры преобразования не специфицируется явно тип возвращаемого значения. Подразумевается тип, имя которого следует за ключевым словом operator.

  • Процедура преобразования может быть объявлена виртуальной.

  • Она может наследоваться.

Лекция.4.Классы С++: Наследование

Класс в C++ может наследовать элементы-данные и элементы-функции от одного или нескольких базовых классов. Сам класс называется в этом случае производным по отношению к базовым классам или классом-потомком. В свою очередь, производный класс может являться базовым по отношению к другим классам.

Принцип-наследования, или порождения новых классов, позволяет абстрагировать (инкапсулировать) некоторые общие свойства и поведение в одном базовом классе, которые будут наследоваться всеми его потомками.

Наследование позволяет также модифицировать поведение базового класса. Производный класс может переопределять некоторые функции базового класса, оставляя фундаментальные свойства класса в неприкосновенности.

Синтаксис производного класса следующий:

class имя_класса: ключ_доступа имя_6азового_класса [, ...]

{

тело_объявления_класса };

Ключ_достпупа — это одно из ключевых слов private, protected или public.