
- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
Перегрузка методов класса.
В классе может быть определено несколько методов, имеющих одинаковые имена. Они различаются количеством и типом аргументов. Такое свойство называется перегрузкой или совмещением методов. Использование нескольких конструкторов, в частности, возможно благодаря этому свойству.
Пример:
class module
{
public:
int mod(int n){return abs(n);}
double mod(double n){return fabs(n);}
};
void main()
{
module m;
int a=-10;
cout<<m.mod(a);
double b=-1.5;
cout<<m.mod(b);
}
Перегрузка операций.
Для класса можно определить свои собственные операции. Такая возможность называется перегрузкой операций. Можно перегружать все арифметические и логические операции, операции присваивания, квадратные и круглые скобки, операции new и delete.
Синтаксис метода, перегружающего операцию:
ВозвращаемыйТип operator перегружаемаяОперация(параметры){код}
Пример:
coins coins::operator+(coins a)
{
coins res;
res.number=this->number+a.number;
return res;
}
Практическое задание.
Вариант A.
Разработайте класс
"Вектор", определите набор основных
операций между ними. Умножение векторов
определите
как скалярное произведение векторов
и
в эвклидовой метрике в
:
Предусмотрите возможности сохранения векторов на диске и восстановления их из файла.
Вариант В.
Разработайте класс "Комплексное число", определите набор основных операций между ними и исследуйте в какие точки переводятся точки фигуры
преобразованиями
Вариант C.
См. вариант B. Для преобразований:
-
Производные классы. Полиморфизм
Производный класс можно рассматривать как расширение существующего класса (или наследника). Исходный класс называется базовым или родительским, а производный – подклассом или потомком. Производный класс представляет собой расширение или модификацию базового класса. Имея родительский класс, можно использовать единый интерфейс для получения нескольких производных классов.
Любой класс может быть родительским, и любой производный класс будет следовать его описанию. Класс-потомок может иметь дополнительные возможности по сравнению с базовым классом. В производном классе можно изменить права доступа, добавить новые элементы или перегрузить имеющиеся методы.
Синтаксис производного класса:
class ИмяПроизводногоКласса:(public/private/protected)
ИмяРодительскогоКласса {. . . };
Слова public, private и protected являются ключами доступа методов производного класса к элементам родительского класса. Ключ public не меняет тип доступа, ключ private делает для всех элементов базового класса тип доступа private, ключ protected разрешает доступ методов производного класса к общим элементам базового класса, но запрещает доступ для всех других методов. Если необходимо некоторым элементам изменить тип доступа, то их объявляю в производном классе повторно в соответствующей секции.
Если производный класс имеет всего один родительский класс, то такое наследование называется простым, в противном случае наследование называется сложным. Пример сложного наследования:
class A{. . .};
class B{. . .};
class C:public A, protected B{. . .};
Виртуальные функции
Функция–элемент может быть объявлена как virtual. В этом случае при ее вызове с указателем базового класса будет вызываться функция производного класса, если она переопределена.
Пример:
Class Base
{
public:
virtual void virt(){cout<<”From Base, virt.”;}
void nonVirt(){cout<<”From Base, non virt.”;}
};
class Derived:public Base
{
public:
void virt(){cout<<”From Deriver, virt.”;}
void nonVirt(){cout<<”From Derived, non virt.”;}
};
void main()
{
Base *bp=new Derived;//Базовый указатель ссылается на произв.
bp_>virt();//Вызов виртуальной ф-ции произв. класса.
bp_>nonVirt();//Вызов невиртуальной ф-ции базового класса.
}
Виртуальный механизм можно обойти, если при вызове указать имя класса с операцией разрешения видимости:
bp_>Base::virt();//Вызов виртуальной ф-ции произв. класса.
Свойство базового класса взаимодействовать с виртуальными функциями производного класса называется полиморфизмом. Компилятор не может определить заранее, какая функция должна вызываться на самом деле. В результате, это определяется во время выполнения с помощью таблицы виртуальных переходов. Эту особенность называют поздним связыванием.
Виртуальная функция в базовом классе может быть определена как чистая. Для этого необходимо вместо кода этой функции написать “=0”. Класс, содержащий подобные функции называется абстрактным. Для такого класса невозможно создать представителя класса. Производный класс обязан содержать описание чистой функции.