- •Р. Лафоре
- •Глава 1. Общие сведения 32
- •Глава 3. Циклы и ветвления 92
- •Глава 4. Структуры 142
- •Глава 5. Функции 168
- •Глава 6. Объекты и классы 217
- •Глава 7. Массивы и строки 261
- •Глава 8. Перегрузка операций 312
- •Глава 9. Наследование 361
- •Глава 10. Указатели 411
- •Глава 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
Int
operator*(Int
i2) //
умножение
{
return
checkit(long
double(i)*long
double(i2));
}
Int
operator/(Int
i2) //
деление
{
return
checkit(long
double(i)/long
double(i2));
}
Int
checkit(long
double
answer) //
проверка
//
результатов
{
if(answer
> 2147483647.0L || answer <-2147483647.0L)
{
cout
<< "\nОшибка
переполнения\n
";exit(1);
}
return
Int(int(answer));
}
};
///////////////////////////////////////////////////////////
int
main()
{
Int
alpha = 20;
Int
beta = 7;
Int
delta, gamma;
gamma
= alpha + beta; //
27
cout
<< "\ngamma
=";
gamma.putInt();
gamma
= alpha - beta; //
13
cout
<< "\ngamma
=";
gamma.putInt();
gamma
= alpha * beta; //
140
cout
<< "\ngamma
=";
gamma.putInt();
gamma
= alpha / beta; //
2
cout
<< "\ngamma
=";
gamma.putInt();
delta
= 2147483647;
gamma
= delta +alpha; //
ошибка переполнения
delta
=-2147483647;
gamma
= delta -alpha; //
ошибка переполнения
cout
<< endl;
return
0;
}
Ответы
на вопросы
а,
в.
Порожденным.
б,
в, г.
Правильный
ответ:
class
Bosworth :public
Alphonso
Утверждение
ложно.
Скрытые.
Да
(предполагая,
что basefunc
не
скрыта).
Правильный
ответ:
BosworthObj.alfunc();
Истинно.Глава 9
Тот,
который принадлежит порожденному
классу.
Правильный
ответ:
Bosworth():
Alphonso(){
}
в,
г.
Истинно.
Правильный
ответ:
Derv(int
arg):Base(arg)
а.
Истинно.
в.
Правильный
ответ:
class
Tire :public
Wheel, public
Rubber
Правильный
ответ:
Base::func();
Ложно.
Обобщением.
г.
Ложно.
Сильная,
агрегации.
Решения
упражнений
1.
Верное решение:
//
ex9_1.cpp
//
класс публикаций и порожденные из него
#include
<iostream>
#include
<string>
using
namespace std;
///////////////////////////////////////////////////////////
class
publication //
базовый класс
{
private:
string
title;
float
price;
public:
void
getdata()
{
cout
<< "\nВведите
заголовок:";cin
>>
title;
cout
<< "Введите
цену:";cin
>>
price;
}
void
putdata()const
{
cout
<< "\nЗаголовок:"
<< title;
cout
<< "\nЦена:"
<< price;
}
};
///////////////////////////////////////////////////////////
class
book :private
publication //
порожденный класс
{
private:
int
pages;
public:
void
getdata()
{
publication::getdata();
cout
<< "Введите
число
страниц:";cin
>>
pages;
}
void
putdata()const
{
publication::putdata();
cout
<< "\nСтраниц:"
<< pages;
}
};
///////////////////////////////////////////////////////////
class
tape :private
publication //
порожденный класс
{
private:
float
time;
public:
void
getdata()
{
publication::getdata();
cout
<< "Введите
время
звучания:";cin
>>
time;
}
void
putdata()const
{
publication::putdata();
cout
<< "\nВремя
звучания:"
<< time;
}
};
///////////////////////////////////////////////////////////
int
main()
{
book
book1;
//
определить публикации
tape
tape1;
book1.getdata();
//
получить данные о них
tape1.getdata();
book1.putdata();
//
вывести данные о них
tape1.putdata();
cout
<< endl;
return
0;
}
Верное
решение:
//
ex9_2.cpp
//
наследование класса String
#include
<iostream>
#include
<cstring>
//
для strcpy(), etc.
using
namespace std;
///////////////////////////////////////////////////////////
class
String //
базовый класс
{
protected:
//
Примечание: не обязательно
//
делать их скрытыми
enum
{ SZ
= 80 }; //
размер всех объектов String
char
str[SZ];
//
содержит С-строку
public:
String()
//
конструктор 0, без аргументов
{
str[0]
== '\0';
}
String(char
s[])
//
конструктор 1, один аргумент
{
strcpy(str,
s); }//
преобразование
из
string в
String
void
display()const
//
вывести String
{
cout
<< str; }
operator
char*()
//
функция преобразования
{
return
str; } //
преобразовать String в C-string
};
///////////////////////////////////////////////////////////
class
Pstring :public
String //
порожденный класс
{
public:
Pstring(char
s[]); //
конструктор
};
//---------------------------------------------------------
Pstring::Pstring(char
s[]) //
конструктор для Pstring
{
if(strlen(s)>
SZ
- 1) //
если слишком длинная строка,
{
for(int
j
= 0; j
< SZ-1;
j++)
//
копировать первую SZ-1
str[j]
== s[j];
//
символы «вручную»
str[j]
== '\0';
//
добавить служебный символ
}
else
//
если не слишком длинная,
String(s);
//
создать нормальную строку
}
///////////////////////////////////////////////////////////
int
main()
{
//
определить String
Pstring
s1
= "Это
очень-очень длинная строка, которая,
возможно, "
"да,
нет, точно, -- превысит размер, ограниченный
SZ.";
cout
<< "\ns1
=";
s1.display(); //
вывести String
Pstring
s2
= "А
это коротенькая строка.";//
определить String
cout
<< "\ns2
=";
s2.display(); //
вывести String
cout
<< endl;
return
0;
}
3.
Верное решение:
//
ex9_3.cpp
//
множественное наследование класса
публикаций
#include
<iostream>
#include
<string>
using
namespace std;
///////////////////////////////////////////////////////////
class
publication
{
