Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

Наконец программа выводит на экран персональные сведения о служащем и выходит за область видимости объекта Employee, в результате чего вызываются четыре деструктора класса для удаления объектов этого класса, вложенных в объект Employee, и созданного ранее временного объекта LastName.

Передача объекта как значения

В листинге 15.3 показано, как создание одного объекта Employee приводит к вызову пяти конструкторов класса String.

Листинг 15.4 — это еще один переписанный вариант программы. В нем нет дополнительных операторов вывода помимо представленных в листинге 15.1 (сейчас они разблокированы) и используется статическая переменная-член ConstructorCount, объявленная в классе String.

Как следует из объявления в листинге 15.1, значение переменной ConstructorCount увеличивается на единицу при каждом вызове конструктора класса String. В конце программы, представленной в листинге 15.4, объект Employee передается на печать сначала как ссылка, а затем как значение. Статическая переменная-член ConstructorCount отслеживает, сколько объектов класса String создается при разных способах передачи объекта Employee как параметра функции.

Примечание:Перед компиляцией этого листинга в программе листинга 15.1 дополнительно к тем строкам, которые были разблокированы для листинга 15.3, следует снять символы комментариев со строк 23, 39, 52, 64, 76 и 153.

Листинг 15.4. Передача объекта как значения

1: #include "String.hpp"

2:

3: class Employee

4: {

5:

6: public:

7: Employee;

8: Employee(char *, char *, char *, long);

9: ~Employee;

10: Employee(const Employee&);

11: Employee & operator= (const Employee &);

12:

13: const String & GetFirstName const

14: { return itsFirstName; }

15: const String & GetLastName const { return itsLastName; }

16: const String & GetAddress const { return itsAddress;

17: long GetSalary const { return itsSalary; }

18:

19: void SetFirstName(const String & fName)

20: { itsFirstName = fName; }

21: void SetLastName(const String & lName)

22: { itsLastName = lName; }

23: void SetAddress(const String & address)

24: { itsAddress = address; }

25: void SetSalary(long salary) { itsSalary = salary; }

26: private:

27: String itsFirstName;

28: String itsLastName;

29: String itsAddress;

30: long itsSalary;

31: };

32:

33: Employee::Employee;

34: itsFirstName(""),

35: itsLastName(""),

36: itsAddress(""),

37: itsSalary(0)

38: { }

39:

40: Employee::Employee(char * firstName, char * lastName,

41: char * address, long salary):

42: itsFirstName(firstName),

43: itsLastName(lastName),

44: itsAddress(address),

45: itsSalary(salary)

46: { }

47:

48: Employee::Employee(const Employee & rhs):

49: itsFirstName(rhs.GetFi rstName),

50: itsLastName(rhs.GetLastName),

51: itsAddress(rhs.GetAddress),

52: itsSalary(rhs.GetSalary)

53: { }

54:

55: Employee::~Employee { }

56:

57: Employee & Employee::operator= (const Employee & rhs)

58: {

59: if (this == &rhs)

60: return *this;

61:

62: itsFirstName = rhs.GetFirstName;

63: itsLastName = rhs.GetLastName;

64: itsAddress = rhs.GetAddress;

65: itsSalary = rhs.GetSalary;

66:

67: return *this;

68: }

69:

70: void PrintFunc(Employee);

71: void rPrintFuno(const Employee&):

72:

73: int main

74: {

75: Employee Edie("Jane","Doe","1461 Shore Parkway", 20000);

76: Edie.SetSalary(20000);

77: Edie.SetFirstName("Edythe");

78: String LastName("Levine");

79: Edie.SetLastName(LastName); 80:

81: cout << "Constructor count: " ;

82: cout << String;:ConstruotorCount << endl;

83: rPrintFunc(Edie);

84: cout << "Constructor count: ";

85: cout << String::ConstructorCount << endl;

86: PrintFunc(Edie);

87: cout << "Constructor count: ";

88: cout << String::ConstructorCount << endl;

89: return 0;

90: }

91: void PrintFunc (Employee Edie)

92: {

93:

94: cout << "Name: ";

95: cout << Edie.GetFirstName.GetString;

96: cout << " " << Edie.GetLastName.GetString;

97: cout << ".\nAddress: ";

98: cout << Edie.GetAddress.GetString;

99: cout << ".\nSalary: " ;

100: cout << Edie.GetSalary;

101: cout << endl;

102:

103: }

104:

105: void rPrintFunc (const Employee& Edie)

106: {

107: cout << "Name: ";

108: cout << Edie.GetFirstName.GetString;

109: cout << " " << Edie.GetLastName.GetString;

110: cout << "\nAddress: ";

111: cout << Edie.GetAddress.GetString;

112: cout << "\nSalary: " ;

113: cout << Edie.GetSalary;

114: cout << endl;

Поделиться:
Популярные книги

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Инженер Петра Великого

Гросов Виктор
1. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого

Колонист "Вано"

Сухов Лео
1. Антикризисный Актив
Фантастика:
героическая фантастика
попаданцы
7.17
рейтинг книги
Колонист Вано

Блуждающие огни 4

Панченко Андрей Алексеевич
4. Блуждающие огни
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Блуждающие огни 4

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

Идеальный мир для Лекаря 28

Сапфир Олег
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 28

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Тигр под елку

Зайцева Мария
4. Наша
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Тигр под елку