- •1. Объектно-ориентированное программирование как методология проектирования программных средств.
- •1.2. Объект
- •Iarray a(10), b(25), c(45);
- •Int main(void)
- •2.1. Перегрузка имен функций
- •Int print(int);
- •Void print(int);
- •Int (*matrix)[10];
- •Void main(void)
- •Void incr(int &aa)
- •3.2 Объявление класса.
- •Имя_класса имя объекта;
- •Имя объекта. Имя элемента
- •Имя_объекта. Имя_метода( );
- •Имя класса *this;
- •Имя_класса (список формальных параметров)
- •Листинг 3.4
- •V_3d( double &X, double &y,double &z)
- •Void main(void)
- •Х:: х(const х&)
- •V_3d::v_3d(const v_3d& v1)
- •Void v_3d::print()
- •Сlass X
- •Void main (void)
- •4. Перегрузка операций
- •V_3d(double x1,double y1,double z1)
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.1. Использование дружественных функций при перегрузке операций
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.2.Особенности использования дружественных функций
- •Имя объекта. Имя_функции
- •Void f1( X& );
- •Void f2 ( X* );
- •Void main(void)
- •5. Производные классы
- •Int Bfunc( );
- •Int Xfunc( );
- •Int Efunc( X & x1 );
- •Istream
- •Iostream
- •Ifstream
- •С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
- •Int width( int w);
- •Int precision( int p);
- •Void main(void)
- •Void open(char* filename, int mode, int access);
- •If(!fout) {
- •7. Виртуальные функции
- •Circle a;
- •A.Build();
- •Virtual double a(double X)
- •Void main (void)
- •Void Graphics Object :: Build() { };
- •8.Шаблоны функций и классов
- •Void main(void)
- •Void Swap ( SwapType &X, SwapType &y)
- •Void main(void)
- •Int a, double b;
- •Int sloc,rloc;//начало и конец очереди
- •Void qput(t I); // помещение элемента в очередь
- •Int main(void)
- •1.Какой принцип ооп реализуется с помощью шаблонных функций и классов?
- •2.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
Int (*matrix)[10];
Такое объявление определяет matrix как указатель на массив из 10 целых. Для выделения памяти для матрицы размером 10*10 и присвоения адреса выделенной памяти переменной matrix, следует записать:
matrix= new int[10][10];
Удаление многомерных массивов любой размерности происходит так, как будто они имеют лишь одно измерение:
delete[] matrix;
2.3.Ссылки
Использование указателей в языке С таит в себе ту опасность, что если оператор изменил адрес, хранящийся в указателе, то указатель более не ссылается на то же значение. Если такое изменение было внесено непреднамеренно, то результатом его может быть серьезная ошибка. Кроме того, использование указателей ведет к написанию программ, пестрящих символами-звездочками.
С++ предлагает альтернативу указателям путем использования нового вида переменных – ссылок. Чтобы сделать переменную ссылкой, необходимо после описателя типа поставить знак &, например:
int i=0;
int &ir=i; // ir – это ссылка на i
ir указывает на i подобно указателю. Оператор
cout << “ir=” << ir <<’\n’;
выведет ir=0, то есть использование ссылки похоже на разадресацию указателя.
Ссылка обязательно должна быть инициализирована (т.е. должно быть что-то, для чего она является ссылкой).
Важно!
Однажды инициализировав ссылку, ей нельзя присвоить другое значение!
Нельзя в той же программе, где используется ir как ссылка на i, присвоить ссылке ir адрес другого объекта т.е. ошибкой является:
int j;
ir=j;
Ссылка является алиасом, т.е. синонимом, другим именем объекта.
Сами по себе ссылочные переменные в С++ используются редко. Ссылки очень удобно использовать в качестве параметров функций. Если в прототипе функции указать, что параметр передается по ссылке, функция при вызове получит доступ к адресу переданного ей аргумента. Пример передачи в функцию параметров по ссылке показан в листинге 2.2.
//Листинг 2.2. Передача параметров по ссылке
#include <iostream.h>
void incr(int &aa); // обьявление параметра-ссылки в прототипе функции
Void main(void)
{
int x=1;
incr(x); // неявная инициализация ссылки адресом переменной х
cout << “x=” << x <<“\n”;
}
Void incr(int &aa)
{
aa++;
}
Результатом работы этой программы будет x=2, так как функция получила доступ к содержимому памяти, в которой хранится переменная х посредством передачи параметра по ссылке.
Вывод.
Ссылку можно рассматривать как постоянный указатель, который всегда разадресован, поэтому для него не надо выполнять операцию разадресации.
Контрольные вопросы
1.Что означает перегрузка имен функций в С++?
2.Каким образом в С++ осуществляется динамическое распределение памяти под данные? Каким образом можно освободить память, динамически распределенную программе?
3.Что такое ссылка? В чем различие между ссылкой и указателем? В чем заключается удобство использования ссылок?
3. КЛАССЫ С++
3.1. Класс как абстрактный тип.
Совокупность принципов проектирования, разработки и реализации программ, которая базируется на абстракции данных, предусматривает создание новых типов данных, с наибольшей полнотой отображающих особенности решаемой задачи. Одновременно с данными для каждого типа вводится набор операций, удобных для обработки этих данных. В языке С++ программист имеет возможность вводить собственные типы данных и определять операции над ними с помощью классов.
Класс-это фундаментальное понятие С++, с введением которого язык С++ становится объектно-ориентированным языком.
Класс – это тип, создаваемый программистом на основе уже существующих типов.
Можно дать и более развернутое определение класса:
Класс-это именованный набор компонентов, включающий структуры данных и связанные с ними функции их обработки.
