- •Р. Лафоре
- •Глава 1. Общие сведения 32
- •Глава 3. Циклы и ветвления 92
- •Глава 4. Структуры 142
- •Глава 5. Функции 168
- •Глава 6. Объекты и классы 217
- •Глава 7. Массивы и строки 261
- •Глава 8. Перегрузка операций 312
- •Глава 10. Указатели 411
- •Глава 9. Наследование 361
- •Глава 11. Виртуальные функции 476
- •Глава 12. Потоки и файлы 536
- •Глава 13. Многофайловые программы 596
- •Глава 14. Шаблоны и исключения 640
- •Глава 15. Стандартная библиотека шаблонов (stl) 681
- •Глава 16. Разработка объектно-ориентированного по 752
- •Глава 1 «Общие сведения» включает список тем, касающихся uml, с указа- нием их расположения в книге.
- •Глава 1
- •Глава 2
- •Глава 3
- •If внутри циклов
- •If и else во вложенных ветвлениях
- •Глава 4
- •Глава 5 Функции
- •Глава 6
- •Глава 7
- •123456. Россия
- •123456. Россия
- •Глава 8
- •Глава 9
- •Глава 10 Указатели
- •Main() передает адрес переменной var в ptrd в centimize()
- •Centimize() использует этот адрес для доступа к var
- •Глава 11
- •Глава 12
- •Тип:менеджер Фамилия: Александров Номер:1111
- •Тип:Ученый Фамилия: Лебедев Номер:2222
- •Тип:рабочий Фамилия:Шевелев Номер:3333
- •Глава 13
- •Глава 14
- •Много объектов разных классов в памяти Рис. 14.2. Шаблон класса
- •Алгоритмы используют итераторы для работы с объектами контейнеров. Рис. 15.1. Контейнеры, алгоритмы и итераторы
- •Глава 16
- •Глава 1
- •Глава 2
- •Глава 3
- •Глава 4
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10 Ответы на вопросы
- •Глава 11
- •Глава 12 Ответы на вопросы
- •Глава 13 Ответы на вопросы
- •Глава 14 Ответы на вопросы
- •Глава 15 Ответы на вопросы
- •Глава 16
{
float
fltfeet = d2.feet +d2.inches/12.0;//
преобразовать
//
в формат float
fltfeet
/= divisor;
//
выполнить деление
feet
= int(fltfeet);
//
получить футовую часть
inches
=(fltfeet
- feet)*12.0;
//
получить дюймовую часть
}
///////////////////////////////////////////////////////////
int
main()
{
Distance
distarr[100]; //
массив
из
100 объектов
типа
//
Distance
Distance
total(0,
0.0), average;//
прочие расстояния
int
count
= 0; //
считает количество введенных значений
char
ch;
//
признак ответа пользователя
do
{
cout
<< "\nВведите
расстояние ";//
получить значения
distarr[count++].getdist();
//
от оператора, занести
cout
<< "\nПродолжить
(y/n)?";
//
их в массив
cin
>>
ch;
}
while(ch
!= 'n');
for(int
j
= 0; j
< count;
j++)
//
сложить все расстояния
total.add_dist(total,
distarr[j]); //
в total
average.div_dist(total,
count); //
разделить на число
cout
<< "\nСреднее:";
//
вывести среднее значение
average.showdist();
cout
<< endl;
return
0;
}
Ответы
на вопросы
а,
в.
Правильный
ответ:
x3.subtract(x2,
x1);
Правильный
ответ:
x3
=
x2
-
x1;
Истинно.
Правильный
ответ:
void
operator--(){
count--;
}
Нисколько.
б,
г.
Правильный
ответ:
void
Distance::operator++()
{
++feet;
}Глава 8
Правильный
ответ:
Distance
Distance :: operator++()
{
int
f =++feet;
float
i = inches;
return
Distance(f,
i);
}
Увеличивает
переменную до ее использования как
незамещенный опера-
тор ++.
в,
д, б, а, г.
Истинно.
б,
в.
Правильный
ответ:
String
String::operator++()
{
int
len = strlen(str);
for(int
j = 0; j < len; j++)
str[j] ==
toupper(str[j]))
return
String(str);
}
г.
Ложно,
если есть программа преобразования;
в противном случае истинно.
б.
Истинно.
Конструктор.
Истинно,
но человеку такое трудно будет понять.
г.
Атрибутами,
операторами.
Ложно.
а.
Решения
упражнений
1.
Верное решение:
//
ex8_1.cpp
//
перегружаемая операция '-' находит
разность расстояний
#include
<iostream>
using
namespace std;
///////////////////////////////////////////////////////////
class
Distance
//
Класс английских расстояний
{
private:
int
feet;
float
inches;
public:
//
конструктор без аргументов
Distance():
feet(0), inches(0.0)
{
} //
конструктор (два аргумента)
Distance(int
ft, float
in):feet(ft), inches(in)
{
}
void
getdist()
//
получить расстояние от пользователя
{
cout
<< "\nВведите
число футов:";cin
>>
feet;
cout
<< "Число
дюймов:";cin
>>
inches;
}
void
showdist() //
вывести расстояние
{
cout
<< feet << "\'-"
<<
inches <<
'\"';
}
Distance
operator+(Distance);//
складывает два расстояния
Distance
operator-(Distance);//
вычитает два расстояния
};
//---------------------------------------------------------
//
добавление d2 к расстоянию
Distance
Distance::operator+(Distance
d2)//
вернуть сумму
{
int
f = feet +d2.feet; //
сложить футы
float
i = inches +d2.inches; //
сложить дюймы
if(i
>= 12.0) //
если сумма дюймов превышает 12.0,
{
//
уменьшить число дюймов
i
-= 12.0; //
на 12.0 и
f++;
//
увеличить число футов н 1
}
//
вернуть временное
return
Distance(f,
i);//
значение расстояния, равное сумме
}
//---------------------------------------------------------
//
вычитание d2
из расстояния
Distance
Distance::operator-(Distance
d2)
//
вернуть разность
{
int
f
= feet
- d2.feet;
//
разность футов
float
i = inches - d2.inches; //
разность дюймов
if(i
< 0) //
если число дюймов меньше 0,
{
//
увеличить их количество на
i
+= 12.0; //
12.0 и
f--;
//
уменьшить число футов на 1
}
//
вернуть временное расстояние,
return
Distance(f,
i);
//
равное разности
}
///////////////////////////////////////////////////////////
int
main()
{
Distance
dist1, dist3; //
определить
расстояния
dist1.getdist();
//
получить dist1
от пользователя
Distance
dist2(3,
6.25);//
определить, инициализировать
//
dist2
dist3
= dist1
- dist2;
//
разность
//
вывести все расстояния
cout
<< "\ndist1
=";
dist1.showdist();
cout
<< "\ndist2
=";
dist2.showdist();
cout
<< "\ndist3
=";
dist3.showdist();
cout
<< endl;
return
0;
}
Верное
решение:
//
ex8_2.cpp
//
перегружаемая операция '+=' для конкатенации
строк
#include
<iostream>
#include
<cstring> //
для strcpy(), strlen()
using
namespace std;
#include
<process.h> //
для exit()
///////////////////////////////////////////////////////////
class
String
//
пользовательский строковый тип
{
private:
enum
{ SZ
= 80 }; //
размер
объектов
String
char
str[SZ];
//
содержит С-строку
public:
String()
//
конструктор без аргументов
{
strcpy(str,
"");
}
String(char
s[])
//
конструктор с 1 аргументом
{
strcpy(str,
s); }
void
display() //
вывод строки
{
cout
<< str; }
String
operator+=(String
ss)//
прибавление строки к
//
имеющейся
{//
результат сохраняется в имеющейся
строке
if(strlen(str)
+ strlen(ss.str)
>= SZ)
{
cout
<< "\nПереполнение
строки";
exit(1);
}
strcat(str,
ss.str);//
добавить
аргументную
строку
return
String(str); //
вернуть временный String
}
};
///////////////////////////////////////////////////////////
int
main()
{
String
s1
= "С
Новым Годом!";
//
использует конструктор с
//
одним аргументом
String
s2
= "Ура,
товарищи!";
//
использует конструктор
//
с одним аргументом
String
s3;
//
использует конструктор без аргументов
s3
= s1 += s2;//
прибавить s2 к s1, результат - в s3
cout
<< "\ns1
=";
s1.display(); //
вывести s1
cout
<< "\ns2
=";
s2.display(); //
вывести s2
cout
<< "\ns3
=";
s3.display(); //
вывести s3
cout
<< endl;
return
0;
}
Верное
решение:
//
ex8_3.cpp
//
перегружаемая операция '+' складывает
два времени
#include
<iostream>
using
namespace std;
///////////////////////////////////////////////////////////
class
time
{
private:
int
hrs, mins, secs;
public:
time():
hrs(0), mins(0), secs(0) //
конструктор
без
аргум.
{
} //
конструктор с тремя аргументами
time(int
h, int
m, int
s):hrs(h), mins(m), secs(s)
{
}
void
display() //
формат 11:59:59
{
cout
<< hrs << ":"
<< mins << ":"
<< secs; }
time
operator+(time
t2) //
сложить два времени
{
int
s = secs +t2.secs; //
сложить секунды
int
m = mins +t2.mins; //
сложить минуты
int
h
= hrs
+t2.hrs;
//
сложить часы
if(s
> 59) //
если слишком много секунд,
{
s
-= 60; m++;
} //
перенести их в одну минуту
if(m
> 59) //
если слишком много минут,
{
m
-= 60; h++;
} //
перенести их в один час
return
time(h,
m,
s);
//
вернуть временное значение
}
};
///////////////////////////////////////////////////////////
int
main()
{
time
time1(5,
59, 59);//
создать и инициализировать
time
time2(4,
30, 30);//
два времени
time
time3;
//
еще одно время создать
time3
= time1
+time2;
//
сложить два значения времени
cout
<< "\ntime3
=";
time3.display(); //
вывести результат
cout
<< endl;
return
0;
}
4.
Верное решение:
//
ex8_4.cpp
//
работа перегружаемых арифметических
операций с типом Int
#include
<iostream>
using
namespace std;
#include
<process.h>
//
для
exit()
///////////////////////////////////////////////////////////
class
Int
{
private:
int
i;
public:
Int():
i(0) //
конструктор без аргументов
{
}
Int(int
ii):i(ii) //
конструктор с одним аргументом
{
} //
(из
int в
Int)
void
putInt() //
вывод
Int
{
cout
<< i; }
void
getInt() //
чтение
Int с
клавиатуры
{
cin
>>
i; }
operator
int()
//
операция преобразования
{
return
i; } //
(Int в
int)
Int
operator+(Int
i2) //
сложение
{
return
checkit(long
double(i)
+ long
double(i2));
}
Int
operator-(Int
i2) //
вычитание
{
return
checkit(long
double(i)
- long
double(i2));
}
