Скачать презентацию Конструктор с параметрами Конструктор с Скачать презентацию Конструктор с параметрами Конструктор с

Конструктор с параметрами.ppt

  • Количество слайдов: 46

Конструктор с параметрами Конструктор с параметрами

 • Конструктор с параметрами называется конструктор инициализации (initialized constructor) или основной конструктор. Конструктор • Конструктор с параметрами называется конструктор инициализации (initialized constructor) или основной конструктор. Конструктор инициализации будет иметь один параметр, который будет передаваться переменной id и эта переменная будет идентификатором объекта. Конструктор по умолчанию будет присваивать ей значение 0.

Рассмотрим пример, опять использую класс queue, немного его изменив: class queue { protected: int Рассмотрим пример, опять использую класс 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 будет содержать значение параметра, идентифицирующего объект. Он будет определен при создании объекта Переменная id будет содержать значение параметра, идентифицирующего объект. Он будет определен при создании объекта типа queue. Перепишем конструктор по умолчанию в следующем виде: queue: : queue(void) { rloc=sloc=id=0; cout<<”n конструктор по умолчанию очереди queue ”<

Конструктор инициализации напишем в виде: queue: : queue(int i) { rloc=sloc=0; id=i; cout<<”n конструктор Конструктор инициализации напишем в виде: queue: : queue(int i) { rloc=sloc=0; id=i; cout<<”n конструктор инициализации очереди queue ”<

 • Для передачи значения параметра при объявлении объекта в С++ существует два способа: • Для передачи значения параметра при объявлении объекта в С++ существует два способа: • Первый способ: • queue a=queue(101); • второй способ – более короткая форма: • queue a(101); • Общая форма передачи аргумента конструктора следующая: • class_type переменная (списокаргументов);

Пример Использования конструкторов с параметром и перегруженных конструкторов. Пример Использования конструкторов с параметром и перегруженных конструкторов.

 • • • • #include <iostream. h> #include <conio. h> class queue { • • • • #include #include 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<< • queue: : queue(void) • { • rloc=sloc=id=0; • cout<<"Конструктор по умолчанию очереди"<

 • • • • queue: : ~queue(void) { cout<< • • • • queue: : ~queue(void) { cout<<"Очередь "<

 • • • void queue: : qput(int i) { if (sloc==100) { cout<< • • • 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. • • • • • 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<

Результат работы программы: • • Конструктор инициализации очереди 101 Конструктор инициализации очереди 102 Конструктор Результат работы программы: • • Конструктор инициализации очереди 101 Конструктор инициализации очереди 102 Конструктор инициализации очереди 0 10 20 19 1 200 201 202 Очередь 0 разрушена Очередь 102 разрушена Очередь 101 разрушена

Конструктор может иметь несколько параметров разного типа • • • • #include <iostream. h> Конструктор может иметь несколько параметров разного типа • • • • #include class c 1 { int i; float j; public: c 1(int a, float b); void show(void); }; c 1: : c 1(int a, float b) { i=a; j=b; }

 • • • void c 1: : show(void) { cout<<”i=”<<i<<” j=”<<j<<endl; } void • • • void c 1: : show(void) { cout<<”i=”<

Конструктор копирования • Конструктор копирования (копии) является конструктором специального вида: он воспринимает в качестве Конструктор копирования • Конструктор копирования (копии) является конструктором специального вида: он воспринимает в качестве аргумента константную ссылку на объект класса (const тип-класса&) или простую ссылку на объект (типкласса&)

Пример: • class Coord • { • int x, y; • public: • Coord(const Пример: • class Coord • { • int x, y; • public: • Coord(const Coord &src); // конструктор копирования • }; • Coord: : Coord(const Coord &src) • { • x=src. x; • y=src. y; • }

Пример • • • • • #include<iostream. h> #include<conio. h> #include<math. h> class Three. Пример • • • • • #include #include #include class Three. Angle { double a, b, c; public: Three. Angle(void); Three. Angle(double a, double b, double c); Three. Angle(const Three. Angle & src); void input(); void output(); void set_a(double x){a=x; } void set_b(double x){b=x; } void set_c(double x){c=x; } double get_a(){return a; } double get_b(){return b; } double get_c(){return c; }

 • double med 1(double a, double b, double c) • {return sqrt(2*(b*b+c*c)-a*a)/2; } • double med 1(double a, double b, double c) • {return sqrt(2*(b*b+c*c)-a*a)/2; } • double med 2(double a, double b, double c) • {return sqrt(2*(a*a+c*c)-b*b)/2; } • double med 3(double a, double b, double c) • {return sqrt(2*(b*b+a*a)-c*c)/2; } • double noparmed 1(void) • {return sqrt(2*(b*b+c*c)-a*a)/2; } • double noparmed 2(void) • {return sqrt(2*(a*a+c*c)-b*b)/2; } • double noparmed 3(void) • { return sqrt(2*(b*b+a*a)-c*c)/2; } • };

 • Three. Angle: : Three. Angle(void) • { • a=0; b=0; c=0; • • Three. Angle: : Three. Angle(void) • { • a=0; b=0; c=0; • } • Three. Angle: : Three. Angle(double a 1, double b 1, double c 1) • { • a=a 1; b=b 1; c=c 1; • } • Three. Angle: : Three. Angle(const Three. Angle & src) • { • a=src. a; c=src. c; b=src. b; • }

>a; • cout<<"Give" src="https://present5.com/presentation/3/24163050_167342906.pdf-img/24163050_167342906.pdf-21.jpg" alt=" • void Three. Angle: : input() • { cout<<"Give a"; cin>>a; • cout<<"Give" /> • void Three. Angle: : input() • { cout<<"Give a"; cin>>a; • cout<<"Give b"; cin>>b; • cout<<"Give c"; cin>>c; • } • void Three. Angle: : output() • { • cout<<"a="<

 • void main(void) • { • do • { • Three. Angle k; • void main(void) • { • do • { • Three. Angle k; • k. input(); • k. output(); • cout<<"med 1="<

 • cout<< • cout<<"med 1="<

Дружественные функции Дружественные функции

Пример • • class c 1 { … public: friend void frd(void); … }; Пример • • class c 1 { … public: friend void frd(void); … }; frd – дружественная функция (friend function) класса с1.

 • Пример объявления двух классов, в каждом из которых объявлена дружественная функция int • Пример объявления двух классов, в каждом из которых объявлена дружественная функция int same_color(line l, box b), не являющаяся членом ни первого, ни второго класса.

 • • • class box { int color; int upx, upy; int lowx, • • • class box { int color; int upx, upy; int lowx, lowy; public: friend int same_color(line l, box b); void set_color(int c); void define_box(int x 1, int y 1, int x 2, int y 2); void show_box(void); };

 • • • class line { int color; int startx, starty; int len; • • • class line { int color; int startx, starty; int len; public: friend int same_color(line l, box b); void set_color(int c); void define_line(int x, int y, int len); void show_line(void); };

 • • • // Описание дружественной функции int same_color(line l, box b) { • • • // Описание дружественной функции int same_color(line l, box b) { if (l. color==b. color) return 1; return 0; }

 • void main(void) • { • line l; • box b; • b. • void main(void) • { • line l; • box b; • b. define_box(5, 5, 25, 10); // прямоугольная область • b. set_color(RED); • l. define_line(5, 15, 30); // линия • l. set_color(BLUE); • b. show_box(); • l. show_line(); • if (same_color(l, b)) • cout<<”Одинаковые цвета”<

Замечание Структура программы имеет вид #include <iostream. h> #include <conio. h> class line; // Замечание Структура программы имеет вид #include #include class line; // предварительное объявление класса class box {. . }; class line (…}; ….

 • Дружественная функция может быть не только внешняя функция, но и функция – • Дружественная функция может быть не только внешняя функция, но и функция – член другого класса. В предыдущем примере можно было объявить функцию same_color() функцией – членом класса box, а в классе line – дружественной функцией.

 • • • class line; class box { int color; int upx, upy; • • • 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 x 1, int y 1, int x 2, int y 2); void show_box(void); };

 • • • class line { int color; int startx, starty; int len; • • • 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 указано полное имя функции • Следует обратить внимание, что в объявлении класса 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) { …. . } Вызвать функцию, определенную • • • void f(int i=10) { …. . } Вызвать функцию, определенную таким образом, можно двумя способами: f(1); // передаем значение аргумента i, равное 1. f(); // передаем значение i по умолчанию. Рассмотрим пример, в котором демонстрируется удобство установки аргументов по умолчанию. Функция при работе с текстовым экраном выводит указанную строку, начиная с заданного места экрана. Функция имеет имя stringxy() и не принадлежит , и другим библиотекам С++.

 • • void stringxy(char *str, int x=-1, int y=-1) { if(x= = -1) • • void stringxy(char *str, int x=-1, int y=-1) { if(x= = -1) x=wherex(); if(y= = -1) y=wherey(); gotoxy(x, y); cout<. Они возвращают текущие координаты курсора x и y соответственно.

Использование stringxy() приведено в следующем примере. • • • • #include <iostream. h> #include Использование stringxy() приведено в следующем примере. • • • • #include #include void stringxy(char *str, int x=-1, int y=-1); void main(void) { stringxy(“Это строка 11n”, 1, 11); getch(); stringxy(“ продолжение на той же строкеn”); getch(); stringxy(“Это строка 13n”, 20, 13); getch(); stringxy(“ с позиции 60n”, 60); getch(); }

 • // описание функции с аргументами, задаваемыми по умолчанию • // есть отличие • // описание функции с аргументами, задаваемыми по умолчанию • // есть отличие заголовка функции от прототипа функции • void stringxy(char *str, int x, int y) • { • if(x= = -1) x=wherex(); • if(y= = -1) y=wherey(); • gotoxy(x, y); • cout<

Структуры и классы Структуры и классы

 • Структура может включать данные и правила обработки этих данных. Различие структур и • Структура может включать данные и правила обработки этих данных. Различие структур и классов в С++ состоит в том, что члены класса по умолчанию имеют режим доступа private, а в структуре члены структуры по умолчанию public.

Пример объявления структуры queue. • • • • struct queue { private: int q[100]; Пример объявления структуры queue. • • • • struct queue { private: int q[100]; int sloc, rloc; int id; // идентификатор объекта public: queue(void); // конструктор по умолчанию queue(int i); // конструктор инициализации ~queue(void); // деструктор void qput(int); // прототипы int qget(void); // функций }; Объявление объектов структуры queue obj(1), obj 2;