- •1. Конструкторы и деструкторы
- •Конструкторы.
- •Int II; float ee; char cc;
- •Конструктор с параметрами или конструктор общего вида.
- •Конструктор с аргументами, задаваемыми по умолчанию.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Определение конструктора копирования.
- •Деструкторы
- •Int main () {
- •Int main ( ) {
- •Void Print ( My obj )
- •Int main ( ) {
- •2. Указатели на поля данных и на методы класса.
- •Int main (){
- •3.Указатель this
- •Int X, y ; public:
- •Void print ( void)
- •Int main ()
- •Void que::add( ) {
- •Void que::print (void)
- •Int main( )
- •4. Перегрузка функций
- •Перегрузка конструкторов
Void que::add( ) {
que* list= first ; //текущий указатель устанавливается на начало //очереди
que * uk =0 ; // вспомогательный указатель
while (list!=0) //пока не достигнем конца продвигаемся по очереди
{ uk = list ; list=list->next }
if(uk!=0) {uk->next=this; } //присоединение объекта в конец //очереди
else first = this; //очередь пустая, первому элементу //присваивается this
this->next= 0; }
//Вывод содержимого очереди
Void que::print (void)
{ que *list = first ; //указатель устанавливаем на начало очереди
if ( list = = 0) {cout<<"\nОчередь пуста"; return; }
else cout<<"\nСодержимое очереди: "<<endl;
while ( list!=0)
{cout<<list->bukva; list=list->next;}
}
#endif
//Программа – связанная очередь
#include<iostream>
using namespace std;
#include "func_que.h" //Определениекласса que
//Инициализациястатическогополяданных
que * que :: first = 0;
Int main( )
{ //определяемобъектыкласса
que A('a') ; que B('b' ) ; que C('c'); que D('d');
que::print ( ); // вызов статического метода
A.add ( ); B.add ( ); C.add ( ); D.add ( ); //включаем в очередь //объекты
que::print ( ); //выводим очередь
return 0; }
Результат выполнения программы:
Очередь пуста
Содержимое очереди:
abcd
4. Перегрузка функций
С++ позволяет определить в программе произвольное количество функций с одним именем, при условии, что все они имеют разный состав параметров, или сигнатуру.
Этот вопрос подробно рассматривался в первой части пособия. Перегрузка функций используется, когда данные и код
для их обработки различны, но при этом удобно, чтобы функции назывались одинаково.
Перегрузка обычных функций не дает, каких-либо существенных преимуществ, это просто удобно.
Другое дело с конструкторами классов.
Перегрузка конструкторов
Перегрузка конструкторов приобретает особое значение, из-за того, что конструктору нельзя назначать произвольное имя, оно всегда должно совпадать с именем класса.
Наличие в классе нескольких конструкторов, имеющих одно имя, но разный состав параметров, возможно благодаря реализации средства перегрузки функций!!!
Таким образом, перегрузка для конструкторов просто неизбежна.
Мы уже рассматривали конструкторы, которые могут быть включены в класс:
class A { int x , y ;
public:
A (int, int ); // конструктор с параметрами для инициализации
// данных
A( ); // конструктор по умолчанию
A(A& ) ; // конструктор копирования
… } ;
Часто при разработке класса предусматривается несколько вариантов инициализации объектов и значит должно быть несколько конструкторов с параметрами, например,
сlass Window {
int x; // х-координата левого верхнего угла окна
int y; // y-координата левого верхнего угла окна
int w; // ширина окна
int h; // высота окна
public:
Window ( ) // конструктор по умолчанию
{ x = y = 0; w = h= 100; }
Window (int w1, int h1 ) // конструктор инициализации размеров
// окна
{ x = y = 0; w = w1; h = h1; }
Window (int x1, int y1, int w1, int h1 ) // инициализация положения и
{ x = x1; y = y1; w = w1; h = h1; } //размеров окна
Window (Window&win) // конструктор копирования
{ x = win.x; y = win.y; w = win.w; h = win.h; }
};
Можно создавать, например, следующие объекты:
Window w1;
Window w2 (300, 250);
Window w3 (5, 10, 400, 300);
Window w4 = w3;
