- •Введение в понятие класса
- •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)
Конструктор с параметрами
Для инициализации элементов объекта определенными конкретными значениями можно использовать конструктор с параметрами. Еще раз модифицируем класс queue, добавив в него новую переменную id и еще один конструктор. Конструктор с параметрами называется конструктор инициализации (initialized constructor) или основной конструктор. Конструктор инициализации будет иметь один параметр, который будет передаваться переменной id и эта переменная будет идентификатором объекта. Конструктор по умолчанию будет присваивать ей значение 0.
Рассмотрим пример, опять использую класс queue, немного его изменив:
class queue {
protected:
int q[100];
int sloc,rloc;
int id; // идентификатор объекта
public:
queue(void); // конструктор по умолчанию
queue(int i); // конструктор инициализации
~queue(void); // деструктор
void qput(int); // прототипы
int qget(void); // функций
};
Переменная id будет содержать значение параметра, идентифицирующего объект. Он будет определен при создании объекта типа queue. Перепишем конструктор по умолчанию в следующем виде:
queue::queue(void)
{
rloc=sloc=id=0;
cout<<”\n конструктор по умолчанию очереди queue ”<<id<<endl;
}
Конструктор инициализации напишем в виде:
queue::queue(int i)
{
rloc=sloc=0;
id=i;
cout<<”\n конструктор инициализации очереди queue ”<<id<<endl;
}
Для передачи значения параметра при объявлении объекта в С++ существует два способа:
Первый способ:
queue a=queue(101);
Это объявление объекта a типа queue и передача значения 101 в это объект. Редко используемая форма, второй способ – более короткая форма:
queue a(101);
Общая форма передачи аргумента конструктора следующая:
class_type переменная (список-аргументов);
Пример использования конструкторов с параметром и перегруженных конструкторов.
#include <iostream.h>
#include <conio.h>
class queue
{
int q[100];
int sloc,rloc;
int id; // это значение будем определять
public:
queue(void); // конструктор по умолчанию
queue(int i); // конструктор инициализации
~queue(void); // деструктор
void qput(int); // прототип
int qget(void); // прототип
};
queue::queue(void)
{
rloc=sloc=id=0;
cout<<"Конструктор по умолчанию очереди"<<id<<"\n";
}
queue::queue(int i)
{
rloc=sloc=0;
id=i;
cout<<"Конструктор инициализации очереди"<<id<<"\n";
}
queue::~queue(void)
{
cout<<"Очередь "<<id<<" разрушена\n";
}
int queue::qget(void)
{
I f (sloc==rloc)
{
cout<<"\n Очередь пуста\n";
return 0;
}
return q[rloc++];
}
void queue::qput(int i)
{
if (sloc==100)
{
cout<<"\n Очередь полна\n";
return;
}
q[sloc++]=i;
}
void main(void)
{
queue a=queue(101), b(102), c; // Объявление объектов
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
for(int i=0;i<3;i++)
c.qput(200+i);
cout<<a.qget()<<" ";
cout<<a.qget()<<" ";
cout<<b.qget()<<" ";
cout<<b.qget()<<"\n";
for(i=0;i<3;i++)
cout<<c.qget()<<" ";
cout<<"\n";
getch();
}
Результат работы программы
Конструктор инициализации очереди 101
Конструктор инициализации очереди 102
Конструктор инициализации очереди 0
10 20 19 1
200 201 202
Очередь 0 разрушена
Очередь 102 разрушена
Очередь 101 разрушена
Конструктор может иметь несколько параметров разного типа
#include <iostream.h>
class c1
{
int i;
float j;
public:
c1(int a, float b);
void show(void);
};
c1::c1(int a,float b)
{
i=a;
j=b;
}
void c1::show(void)
{
cout<<”i=”<<i<<” j=”<<j<<endl;
}
void main(void)
{
c1 x(1,2.1),y(3,4),z(100,101.1);
x.show();
y.show();
z.show();
}