- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «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-файла
Структура как простейший класс.
Структура в С++ напоминает простейший класс. Рассмотрим пример:
#include <iostream.h>
#include <math.h>
struct math_operation
{
double data;
void setValue(double ang){data=ang;}
double getSquare(){return data*data;}
double getSquareRoot{return sqrt(data);}
}
math_operation math;
int main()
{
math.setValue(35.63);
cout<<”x^2=”<<math.getSquare();
cout<<”square root=”<<math.getSquareRoot();
return 0;
}
Внутри структуры содержатся описания данных и функций-членов.
В данном примере имеется единственный элемент данных “double data” и три функции-члена.
Синтаксис и правила для классов С++.
Описание класса С++ начинается с ключевого слова class. Оформление определения класса очень похоже на описание struct.
class имя_класса
{
тип переменная1;
тип переменная2;
…
функция-член1
функция-член2
…
public:
тип переменная3;
тип переменная4;
…
функция-член3
функция-член4
…
};
По умолчанию члены класса являются частными (private). Они доступны только функциям-членам. После объявления public следуют данные и функции, доступные внешним для класса функциям. Предыдущий пример должен быть записан следующим образом:
#include <iostream.h>
#include <math.h>
class math_operation
{
double data;
public:
void setValue(double ang){data=ang;}
double getSquare(){return data*data;}
double getSquareRoot(){return sqrt(data);}
}
math_operation math;
int main()
{
math.setValue(35.63);
cout<<”x^2=”<<math.getSquare();
cout<<”square root=”<<math.getSquareRoot();
return 0;
}
Теперь к переменной data доступ возможен только через функции-члены класса.
Внутри описания класса может быть указан только прототип метода. Сам метод может быть написан вне описания и даже в другом файле. В этом случае заголовок метода выглядит следующим образом:
возвращаемыйТип имяКласса::имяМетода(список аргументов){код метода}
Inline методы.
В ООП программах встречается множество коротких методов. Код вызова таких методов может оказаться более длинным, чем сам метод. В этом случае метод может быть объявлен с описателем inline. Для них компилятор не создает отдельную функцию, а вставляет код метода непосредственно в каждое место вызова.
Пример:
inline double math_operation::getSquareRoot()
{
return sqrt(data);
}
Действует следующее соглашение, если код метода написан непосредственно внутри описания класса, то он автоматически считается inline.
Указатель this.
При описании класса автоматически объявляется переменная с именем this. Она указывает на текущий экземпляр класса:
ИмяКласса *this;
Его можно использовать в случаях, когда возникает неоднозначность в именах, для явного вызова конструкторов класса, для возврата указателя на текущий объект в методах класса.
Конструкторы и деструкторы.
Особенность ООП в том, что некоторые методы выполняются неявно. К ним относятся конструктор и деструктор.
Конструктор используется для инициализации переменных класса и для выделения памяти под динамические массивы. Он выполняется автоматически при создании представителя класса. Конструктор имеет имя, совпадающее с именем класса. Тип возвращаемого результата для конструктора не указывается. Одновременно может быть определено несколько конструкторов, которые отличаются количеством и типом аргументов. Имеется как минимум два конструктора
-
конструктор без параметров (используемый по умолчанию) и
-
конструктор, создающий копию объекта (копиконструктор).
Если они не включены в описание класса, то компилятор создает их самостоятельно.
Деструктор вызывается при уничтожении объекта. Он обычно используется для освобождения памяти. Деструктор имеет имя, совпадающее с именем класса, но впереди имени ставится знак ‘~’ (тильда), параметров не имеет.
Примеры:
class coins
{
int number;
public:
coins(){number=0;}
coins(int n){number=n;}
coins(coins &c){number=c.number;}
~coins(){cout<<”Finish\n”;}
int convertToRoubles(){return number*0.01;}
};
class stringOperation
{
char *str;
int lenght;
public:
stringOperation(){str=NULL;n=0;}
stringOperation(int n){str=new char[n];lenght=n;}
stringOperation(stringOperation &a)
{
this(a.n);
memcpy(str,a.str,n);
}
~stringOperation(){delete str;}
void indata()
{
cin>>lenght;
for(int i=0;i<lenght;i++)cin>>str[i];
}
void outdata()
{
cout<<lenght<<newline;
for(int i=0;i<lenght;i++)cout<<str[i];
cout<<newline;
};