Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C++.doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
1.44 Mб
Скачать

4.11 Создание функций преобразования типов

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

operator(тип)() {return значение;}

Здесь тип является целевым типом, к которому преобразуется класс, а значение представляет со­бой значение класса после преобразования. Функция преобразования должна быть членом клас­са, для которого она определяется.

Чтобы проиллюстрировать создание функции преобразования типа, используем класс point еще раз. Предположим, что необходимо преобразовать объект point в целое число таким образом, чтобы оно могло использоваться в целочисленном выражении. Допустим, это преобразование будет представлять собой произведение трех координат. Для его выполнения можно определить функцию преобразования следующим образом:

operator int() { return x*у*z; }

Ниже приведена программа, иллюстрирующая работу этой функции преобразования:

#include <iostream.h>

class point

{

int x, у, z; // трехмерные координаты

public:

point(int a, int b, int c) { x=a; y=b, z=c; }

point operator+(point op2);

operator int() { return x*y*z; }

};

point point::operator+(point op2)

{

point temp(0, 0, 0);

temp.x = x+op2.x; temp.у = y+op2.y; temp.z = z+op2.z;

return temp; }

int main()

{

point a(1, 2, 3), b(2, 3, 4);

cout << b+100; // вывод 124 из-за преобразования к int

cout << "\n";

return 0;

}

Как иллюстрирует данная программа, когда объект point используется в целочисленном выражении, таком как cout << b+100, используется функция преобразования объекта. В этом случае функция преобразования возвращает значение 24, которое затем прибавляется к 100.

Глава 5. Наследование, виртуальные функции и полиморфизм

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

Есть еще одна причина, по которой наследованию придается такая важность: с его помощью поддерживается полиморфизм во время выполнения программы. С помощью полиморфизма реализуется принцип «один интерфейс — множество методов».

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