- •Правила стандартных арифметических преобразований
- •Контрольные вопросы и задания
- •Условный оператор. Полная и неполная развилка. Переключатель
- •Контрольные вопросы и задания
- •Контрольные вопросы и задания
- •Одномерные и двумерные массивы. Строки
- •Контрольные вопросы и задания
- •Контрольные вопросы и задания
- •Рекурсия
- •Контрольные вопросы и задания
- •Сущность объектно-ориентированного подхода к программированию (Классы)
- •Введение в классы
- •Конструкторы и деструкторы
- •Полиморфизм
- •Перегрузка операций
Введение в классы
Одним из наиболее важных понятий С++ является класс. Класс - это механизм для создания новых типов.
Синтаксис описания класса похож на синтаксис описания структуры.
class Имя_класса
{
закрытые элементы - члены класса
public:
открытые элементы - члены класса
};
На что здесь следует обратить внимание?
Имя_классас этого момента становится новым именем типа данных, которое используется для объявления объектов класса.
Члены класса- это переменные состояния и методы этого класса, иными словами членами класса могут быть как переменные, так и функции. Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса. Функции-члены класса будем называть методами этого класса.
По умолчанию, все функции и переменные, объявленные в классе, становятся закрытыми (private). Т.е. они доступны только из других членов этого класса. Для объявления открытых членов класса используется ключевое словоpublic. Все функции-методы и переменные, объявленные после словаpublic, доступны и для других членов класса, и для любой другой части программы, в которой содержится класс.
Пример.
class _3d
{
double x, y, z;
public:
double mod ();
double projection (_3d r);
};
В С++ для создания объектов традиционно принято использовать ключевое слово class.
Хотя функции mod() и projection(_3d r) объявлены в _3d, они еще не определены. Для определения метода - члена класса нужно связать имя класса, частью которого является метод, с именем класса. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называют операцией расширения области видимости.
double _3d::mod ()
{
return sqrt (x*x + y*y +z*z);
}
double _3d::projection (_3d r)
{
return (x*r.x + y*r.y + z*r.z) / mod();
}
...
main()
{
_3d a, b;
double dPro, dMod;
dMod = a.mod();
dPro = b.projection(a);
}
Пример 1.Реализовать класс для работы с линейным массивом, обеспечить:
создание заполнением случайным образом или вводом с клавиатуры;
сортировка выбором;
вывод;
поиск минимального и максимального элементов.
Просмотреть листинг решения
// программа ==Пример 1==
#include <iostream.h> #include <stdlib.h> #include <time.h>
class Massiv { int *a, n; public: void Sozd(); void Del(); void Vvod(); void Vvod_Sl(); void Print(); int Min(int ind); // ind - с какого элемента начинать искать минимальный int Max(int ind); void Sort_Viborom(); };
void main() { Massiv a; randomize(); a.Vvod_Sl(); a.Print(); a.Sort_Viborom(); a.Print(); a.Del(); }
void Massiv :: Sozd() { cout << "Количество элементов массива? "; cin >> n; a = (int *) malloc (sizeof(int) * n); }
void Massiv :: Del() { free(a); }
void Massiv :: Vvod() { Sozd(); for (int i=0; i < n; i++) { cout << i << "-й элемент? "; cin >> *(a+i); } }
void Massiv :: Vvod_Sl() { Sozd(); for (int i=0; i < n; i++) { *(a+i)= -200+random(1001); } }
void Massiv :: Print() { for (int i=0; i < n; i++) { cout << *(a+i) << " "; } cout << endl; }
int Massiv :: Min(int ind) { for (int i=ind+1; i < n; i++) if (a[i]<a[ind]) ind = i; return ind; }
int Massiv :: Max(int ind) { for (int i=ind+1; i < n; i++) if (a[i]>a[ind]) ind = i; return ind; }
void Massiv :: Sort_Viborom() { for (int i=0; i < n-1; i++) { int m = Min(i); int Vsp=a[i]; a[i]=a[m]; a[m]=Vsp; } } |