
- •Введение в понятие класса
- •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)
Статические члены класса
В С++ можно использовать статические члены класса, которые являются общими для всех объектов данного класса. Статические члены класса объявляются с атрибутом памяти static. Изменив значение статического члена класса в одном объекте, получаем изменившееся значение в других объектах данного класса. Объявление статических членов – данных класса внутри объявления класса не является описанием, т. е. Под эти данные не выделяется память. Описание данных должно быть выполнено дополнительно. При использовании статического элемента все объекты ссылаются на одно и то же место в памяти.
В С++ можно использовать статические члены-функции класса. Они не получают указатель this, соответственно эти функции не могут обращаться к нестатическим членам класса. К статическим членам класса статические функции-члены класса могут обращаться посредством операции точка или ->. К статическим данным – членам класса и статическим функциям-членам класса можно обращаться, даже если не создано ни одного объекта данного класса, надо только использовать полное имя члена класса.
Пример использования статических членов класса для подсчета числа существующих и созданных объектов класса.
#include <iostream.h>
class st
{
static int count1;
static int count2;
public:
static void show_count(void);
st(void); // конструктор
~st(void); // деструктор
};
st::st(void)
{ count1++; count2++; }
st::~st(void)
{ count2--; }
void st::show_count(void)
{
cout<<”Создано объектов:”<<count1<<endl;
cout<<”Существует объектов:”<<count2<<endl;
}
int st::count1;
int st::count2; // описание переменных
void main(void)
{
st::show_count(); // вызов функции до создания объектов
st a,b,c,*p;
a.show_count();
{
st x,y,z;
st::show_count(); // эти два вызова
z.show_count(); // дадут одинаковый результат
}
p=new st;
st::show_count();
delete p;
st::show_count():
}
Локальные классы
Класс объявленный внутри функции называется локальным классом (local class). Функция, в которой объявлен локальный класс, не имеет специального доступа к членам локального класса. Локальный класс не может иметь статических членов – данных.
Объект локального класса может быть создан только внутри функции, области действия объявления класса. Все функции-члены локального класса должны быть объявлены внутри объявления класса, т.е. быть подставляемыми функциями. Пример использования локальных классов
#include <iostream.h>
Void f(void);
Void main(void)
{ f(); }
Void f(void)
{
class local_class
{
int who;
public:
local_class(int a)
{
who=a; cout<<”Конструктор локального класса “<<who<<endl;
}
~local_class(void)
{ cout<<”Деструктор локального класса “<<who<<endl; }
} obj1(1), obj2(2);
}
Вложенные классы
В С++ допустимо использование вложенных классов (nested). Вложенный класс находится в области действия объемлющего класса, соответственно объекты этого класса могут использоваться как члены этого класса или в функциях – членах класса. Функции – члены класса и статические члены вложенного класса могут быть описаны в глобальной области действия.
Пример использования вложенных классов:
class C
{
class nested_class
{ int who;
public:
nested_class(int a);
~nested_class(void);
};
public:
C(int b);
{
nested_class obj(b*b); cout<<”Конструктор класса С”<<endl;
}
~C(void)
{ cout<<”Деструктор класса С”<<endl; }
};
C::nested_class::nested_class(int a)
{
cout<<”Конструктор вложенного класса “<<who<<endl;
}
C::nested_class::~nested_class(int a)
{ cout<<”Деструктор вложенного класса “<<who<<endl; }