Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
49
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать

Использование дружественных функций.

Функции, которые не являются членами класса, не имеют доступ к закрытым элементам класса. Доступ к ним можно разрешить, если объявить соответствующую функцию с помощью описателя friend:

class ClassA

{

friend void ClassB::FuncName();

friend void regularFunc(int);

};

На дружественные функции не влияют спецификаторы доступа. Описания friend не взаимны. Дружественность не наследуется.

Практическое задание.

Вариант A.

Разработайте классы "Матрица" и "Вектор", определите набор основных операций между ними и методом фиктивных цветов изобразите график следующих поверхностей:

.

Здесь — линейный оператор, действующий из в ; — вектора в — линейный оператор, сопряженный к ; — скалярное произведение между векторам и в эвклидовой метрике в :

Предусмотрите возможности сохранения матриц и векторов на диске и восстановления их из файла.

Вариант B.

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

Вариант C.

Разработайте классы "Матрица" и "Вектор", определите набор основных операций между ними и численно докажите следующие соотношения:

.

Результаты проиллюстрируйте графически.

Здесь — линейный оператор, действующий из в ; — линейный оператор, сопряженный к ; — пространство значений оператора ; — нуль‑пространство (ядро) оператора .

Значок  ^  обозначает ортогональное дополнение к заданному пространству. Предусмотрите возможности сохранения матриц и векторов на диске и восстановления их из файла.

    1. Работа в объектно-ориентированной среде.

Объектно ориентированный код во всех языках программирования имеет некоторые общие особенности, имеется семь общих стандартных характеристик истинных объектно-ориентированных программ:

  • Модульность на базе объектов

  • Абстрактные типы данных

  • Автоматическое управление памятью

  • Классы

  • Наследование

  • Полиморфизм

Объектно-ориентированные стековые операции.

Рассмотрим пример класса С++, реализующего стековые операции.

Стеком называется связный список объектов с доступом в одной точке — вершине стека. Добавлять или извлекать элементы стека можно только через его вершину. Таким образом последний добавленный элемент будет извлечен первым.

Класс, реализующий стек, является простой, объектно-ориентированной программой, хотя в нем и не используются управление памятью, наследование и полиморфизм.

В классе имеется шесть методов для управления стеком: clear() - очистка, top() - определение верхнего элемента, isempty() - проверка стека на пустоту, isfull() - проверка стека на полное заполнение, push() - извлечение из стека, pop() - заталкивание в стек.

#include <string.h>

#include <iostream.h>

class stack

{

enum {maxlen=80};

char str1[maxlen];

int first;

public:

void clear(){first=0;}

char top(){return str1[first];}

int isempty(){return (first==0);}

int isfull(){return (first==maxlen-1);}

void push(char chr){str[++first]=chr;}

char pop(){return (str1[first--]);}

};

main()

{

stack mystack;

char str[11]=”0123456789”;

mystack.clear();

int i;

// Load string to stack:

for(i=0;i<strlen(str);i++)

{

if( !mystack.isfull() )

mystack.push(str[i]);

cout<<str[i]<<endl;

}

// Unload characters from stack

while(!mystac.isempty())

cout<<mystack.pop()<<endl;

return 0;

}

Загрузка и выгрузка выполняются через верхушку стека, поэтому первый записываемый символ оказывается наиболее глубоко.