Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Конструкторы преобразований




 

Если конструктор класса А воспринимает единственный аргумент типа В, то говорят, что В может быть приведен к А с помощью преобразования конструктором. Другими словами, компилятор может использовать конструктор класса А с аргументом типа В, чтобы получить А из В. Сказанное рассмотрим на примере комплексных чисел.

Пример.

class comp

{

float Re, Jm;

public:

comp (float a, float b)

{

Re = a;

Jm = b;

}

comp (float a)

{

Re = a;

Jm = Ø;

}

comp ()

{

}

};

void main ()

{

float r = 96;

comp a(2, -2), b = r;

comp c;

c = b;

}

При создании объекта а вызывается конструктор с двумя параметрами.

В результате a. Re = 2

a. Jm = -2.

Затем вызывается конструктор с одним параметром. Создается объект b c элементами данных b. Re = 96

b. Jm = Ø.

Из объекта r типа float с помощью конструктора создан объект класса comp.

При создании объекта c вызывается «пустой» конструктор. Далее в результате присваивания будет получено

с. Re = 96

с. Jm = Ø.

Операция приведения

 

Это функции–элементы класса, которые осуществляют явное преобразование типа класса к другому типу. Они имеют следующий вид:

Оperator имя_нового_типа ()

{

::::

}

Вызов: имя_нового_типа (имя_объекта_класса);

Операторы приведения подчиняются следующим правилам:

1) Не имеют формальных аргументов; Считается по умолчанию, что это имя объекта данного класса.

2) Нет явного описания типа возвращаемого результата. Считается, что тип результата тот, к которому приводит оператор приведения.

3) Может описываться как virtual.

4) Наследуется.

Пример.

# include < stdio. h>

class A

{

int k;

char * str;

public:

A (int a, char * s)

{

k = a

str = s;

}

operator int ()

{

return k;

}

};

void, main ()

{

A q (12, “Coretta”);

printf (“Целая часть для q = % i \ n “, int (q);

}

В описании класса А определена функция-элемент этого класса operator int (). Она преобразует объект q класса А в переменную типа int. Это происходит в результате вызова операции приведения int (q). Подобным образом можно преобразовать объект класса А в переменную (объект) типа char.

 

Лекция 19

19.1 Друзья

Язык С++ разрешает использовать в качестве аргументов объекты одного класса другому классу или функции, которая не является членом этого класса. Для этого используется ключевое слово friend.

 

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

 

Можно разрешить обычной функции или функции – элементу другого класса пользоваться объектами класса, который объявил эту функцию дружественной с помощью описания friend при определении класса. То есть при определении класса приводится прототип дружественной функции, перед которым стоит слово friend. Ниже приводится пример дружественной функции kuma (man&), у которой в качестве аргумента является ссылка на класс man. Класс man объявил функцию kuma () дружественной для себя.

# include <stdio.h>

Class man

{

char name [20];

char adres [25];

public:

friend void kuma (man& x);

Void get_info ();

Void put_info ();

};

void man:: get_info ()

{

puts (“Введите имя”);

Fflush (stdin);

scanf (“%s”, &name);

puts (“Введите адрес”);

Fflush (stdin);

scanf (“%s”, &adres);

}

void man:: put_info ()

{

printf (“Имя %s, адрес %s \n”, name, adres);

}

Void main ()

{

Man V;

V.get_info ();

V.put_info ();

Kuma (V);

}

void kuma (man& x)

{

printf (“Я кума у %s. Его адрес %s \n”, х.name, х.adres);

}

 

Дружественные классы

При определении класса можно объявить другой класс в качестве друга. Такое объявление выглядит так:

Friend class имя_дружественного_класса;

При этом слово class можно не писать.

Благодаря этому объявлению функции-члены дружественного класса могут использовать в качестве аргумента объекты того класса, который объявил его другом.

В приведенном ниже примере в классе man объявлен в качестве дружественного класс kum.

Функция-элемент kum () класса kum использует объект класса man.

# include <stdio.h>

Class man

{

char name [10];

public:

friend class kum; // class можно не писать

void get_info_man (char* nm)

{

printf (“Введите имя для %s \n”, nm);

Fflush (stdin);

scanf (“%s”, &name);

}

};

Class kum

{

char name_children [15];

public:

Void get_kum_info ();

{

puts (“Введите имя ребенка”);

Fflush (stdin);

scanf (“%s”, &name_children);

}

void kuma (man& x)

{

printf (“У меня есть кум %s \n”, х.name);

printf (“Имя ребенка %s \n”, name_children);

}

};

Void main ()

{

Man a;

a.get_info_man (“a”);

Kum b;

B.get_kum_info ();

B.kuma (a);

}

 

Следует обратить внимание, что функция-член kuma () должна быть описана после спецификатора public, так как иначе b.kuma (a) выполнить невозможно.

 





Поделиться с друзьями:


Дата добавления: 2015-11-05; Мы поможем в написании ваших работ!; просмотров: 538 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2283 - | 2108 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.