- •Введение в понятие класса
- •Void queue::init(void)
- •Перегруженные функции
- •Int sqr_it(int I); // Прототипы
- •Перегрузка операций.
- •Наследование
- •Конструкторы и деструкторы
- •Int sloc,rloc;
- •Void qput(int); // Прототип
- •Int qget(void); // Прототип
- •Конструктор с параметрами
- •Конструктор копирования
- •Void input();
- •Void output();
- •Void ThreeAngle::input()
- •Void ThreeAngle::output()
- •Void main(void)
- •Дружественные функции
- •Замечание
- •Дружественные классы
- •Аргументы функций, задаваемые по умолчанию
- •Void main(void)
- •Void stringxy(char *str, int X, int y)
- •Структуры и классы
- •Объединения и классы
- •Void main()
- •Наследование классов
- •Конструкторы с параметрами при наследовании
- •Множественное наследование
- •Перегрузка функций и операций
- •Ключевое слово this
- •Перегрузка операций ввода/вывода. Инсерторы и экстракторы
- •Void main(void)
- •Vector a(1,2,3),b(4,5,6);
- •Void main(void)
- •Vector a(1,2,3),b(4,5,6);
- •Void main(void)
- •Vector a(1,2,3);
- •Дружественные функции-операции
- •Void main(void)
- •Void swap1(int *I, int *j)
- •Void swap(int a, int b)
- •Void swap1(int *I, int *j)
- •Void swap2(int &a, int &b)
- •Использование ссылочных переменных для перегрузки унарных операций
- •Перегрузка операции индексации [ ]
- •Использование виртуальных функций
- •Указатели на производные типы
- •Виртуальные функции
- •Замечания к использованию виртуальных функций
- •Пример использования виртуальных функций
- •Чистые виртуальные функции и абстрактные типы
- •Производные классы и их конструкторы и деструкторы
- •Void main()
- •Конструкторы и деструкторы при множественном наследовании
- •Void main()
- •Виртуальные базовые классы.
- •Операции динамического выделения памяти new и delete
- •Void main(void)
- •Void main(void)
- •Виртуальные деструкторы
- •Void main(void)
- •Void main(void)
- •Шаблоны классов и функций
- •Шаблоны функций
- •Void main(void)
- •Void main(void)
- •Шаблоны классов
- •Int sloc, rloc;
- •Void qput(t I);
- •Void main(void)
- •Статические члены класса
- •Локальные классы
- •Void f(void);
- •Void main(void)
- •Void f(void)
- •Вложенные классы
- •Void main(void)
Замечание
Структура программы имеет вид:
#include <iostream.h>
#include <conio.h>
class line; // предварительное объявление класса
class box {..};
class line (…};
….
Класс line объявлен предварительно в начале программы. Это похоже на объявление прототипа функции. Класс line используется в классе box, до того как объявлен шаблон класса line, поэтому необходимо сделать такое объявление.
Дружественная функция может быть не только внешняя функция, но и функция – член другого класса. В предыдущем примере можно было объявить функцию same_color() функцией – членом класса box, а в классе line – дружественной функцией.
class line;
class box
{
int color;
int upx,upy;
int lowx,lowy;
public:
int same_color(line l);
void set_color(int c);
void define_box(int x1, int y1, int x2, int y2);
void show_box(void);
};
class line
{
int color;
int startx,starty;
int len;
public:
friend int box::same_color(line l);
void set_color(int c);
void define_line(int x, int y, int len);
void show_line(void);
};
Следует обратить внимание, что в объявлении класса line указано полное имя функции box::same_color(); Кроме того, можно не указывать в качестве аргумента объект класса box. Функция box::same_color() может быть записана в виде:
int box::same_color(line l)
{
if (l.color==color) return 1;
return 0;
}
Дружественные классы
При объявлении класса можно объявить сразу все функции-члены другого класса дружественными одним объявлением:
class X{…};
class Y
{
// …
friend class X;
// …
};
Объявление класса дружественным предполагает, что приватные и защищенные члены класса Y могут использоваться в классе X.
Аргументы функций, задаваемые по умолчанию
С++ предоставляет пользователю возможность установить значения параметров функции по умолчанию, если при вызове аргументы функции не были указаны.
Например функция f() имеет единственный целый аргумент и его значение по умолчанию должно равняться 10. Описание функции:
void f(int i=10)
{
…..
}
Вызвать функцию, определенную таким образом, можно двумя способами:
f(1); // передаем значение аргумента i, равное 1.
f(); // передаем значение i по умолчанию.
Рассмотрим пример, в котором демонстрируется удобство установки аргументов по умолчанию.
Функция при работе с текстовым экраном выводит указанную строку, начиная с заданного места экрана.
Функция имеет имя stringxy() и не принадлежит <string.h>, <conio.h> и другим библиотекам С++.
void stringxy(char *str, int x=-1, int y=-1)
{
if(x= = -1) x=wherex();
if(y= = -1) y=wherey();
gotoxy(x,y);
cout<<str;
}
wherex(), wherey() принадлежат <conio.h>. Они возвращают текущие координаты курсора x и y соответственно.
Использование stringxy() приведено в следующем примере.
#include <iostream.h>
#include <conio.h>
void stringxy(char *str, int x=-1, int y=-1);
Void main(void)
{
stringxy(“Это строка 11\n”,1,11);
getch();
stringxy(“ продолжение на той же строке\n”);
getch();
stringxy(“Это строка 13\n”,20,13);
getch();
stringxy(“ с позиции 60\n”,60);
getch();
}
// описание функции с аргументами, задаваемыми по умолчанию
// есть отличие заголовка функции от прототипа функции