Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лафоре Р. - Объектно-ориентированное программир...doc
Скачиваний:
50
Добавлен:
01.04.2025
Размер:
40.77 Mб
Скачать

{ }

// конструктор с тремя аргументами

time(int h, int m, int s):hrs(h), mins(m), secs(s)

{ }

void display()const // формат 11:59:59

{ cout << hrs << ":" << mins << ":" << secs; }

void add_time(time t1, time t2)// сложить две переменные

{

secs = t1.secs +t2.secs; // сложить секунды

if(secs > 59) // если перебор,

{ secs -= 60; mins++; } // прибавить минуту

mins += t1.mins +t2.mins; // сложить минуты

if(mins > 59) // если слишком много минут,

{ mins -= 60; hrs++; } // прибавить час

hrs += t1.hrs +t2.hrs; // сложить часы

}

};

///////////////////////////////////////////////////////////

int main()

{

const time time1(5, 59, 59); // создание и инициализация

const time time2(4, 30, 30); // двух переменных

time time3; // создать еще одну переменную

time3.add_time(time1, time2);// сложить две переменные

cout << "time3 ="; time3.display();// вывести результат

cout << endl;

return 0;

}

Глава 7

Ответы на вопросы

          1. г.

          2. Того же.

          3. Правильный ответ:

double double Array[100];

          1. 0.9.

          2. Правильный ответ: cout << double Array[j];

          3. в.

          4. Правильный ответ:

int coins[] = { 1, 5, 10, 25, 50, 100 };

          1. г.

          2. Правильный ответ: twoD[2][4]

          3. Истинно.

          4. Правильный ответ:

float flarr[3][3] = { {52, 27, 83}, {94, 73, 49}, {3, 6, 1} };

          1. Адрес в памяти.

          2. а. г.

          3. Массив из 1000 элементов структуры или класса employee.

          4. Правильный ответ: emplist[16].salary

          5. г.

          6. Правильный ответ:

bird manybirds[50];

          1. Ложно.

          2. Правильный ответ: manybirds[26].cheep();

          3. массив, char.

          4. Правильный ответ:

char city[21](Нужен еще один байт для пустого символа.)

          1. Правильный ответ:

char dextrose[] = "6H1206-H20 ";

          1. Истинно.

          2. г.

          3. Правильный ответ: strcpy(blank, name)

          4. Правильный ответ:

class dog {

private:

char breed[80];

int age; };

          1. Ложно.

          2. б, в.

          3. Правильный ответ:

int n = s1.find("cat");

          1. Правильный ответ: s1.insert(12, "cat ");

Решения упражнений

1. Верное решение: // ex7_1.cpp

// переворачивает строку

#include <iostream>

#include <cstring>// для strlen()

using namespace std;

int main()

{

void reversit(char[]); // прототип

const int MAX = 80; // размер массива

char str[MAX]; // строка

cout << "\nВведите строку:"; // получить строку от

cin.get(str, MAX); // пользователя

reversit(str); // перевернуть строку

cout << "Перевернутая строка:";

cout << str << endl; // и вывести ее

return 0;

}

//---------------------------------------------------------

// reversit()

// функция, переворачивающая строку, переданную в аргументе

void reversit(char s[])

{

int len = strlen(s); // найти длину строки

// поменять все символы из первой половины

for(int j = 0; j < len / 2; j++)

{

char temp = s[j]; // на символы

s[j] = s[len – j - 1]; // из второй половины

s[len – j - 1] = temp;

}

}

2. Верное решение:

// ex7_2.cpp

// объект employee, использующий строковый тип данных

#include <iostream>

#include <string>

using namespace std;

///////////////////////////////////////////////////////////

class employee

{

private:

string name;

long number;

public:

void getdata() // получить данные от пользователя

{

cout << "\nВведите имя:";cin >> name;

cout << "Введите номер:";cin >> number;

}

void putdata() // вывод данных

{

cout << "\n Имя:" << name;

cout << "\n Номер:" << number;

}

};

///////////////////////////////////////////////////////////

int main()

{

employee emparr[100]; // массив типа employee

int n = 0; // количество работников

char ch; // ответ пользователя

do { // получить данные от пользователя

cout << "\nВведите данные о работнике с номером " << n + 1;

emparr[n++].getdata();

cout << "Продолжить (y/n)?";cin >> ch;

} while(ch != 'n');

for(int j = 0; j < n; j++) // вывести данные из массива

{

cout << "\nНомер работника " << j + 1;

emparr[j].putdata();

}

cout << endl;

return 0;

}

3. Верное решение: // ex7_3.cpp

// считает среднее значение длин, введенных пользователем

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

class Distance // класс английских расстояний

{

private:

int feet;

float inches;

public:

Distance() // конструктор (без аргументов)

{ feet = 0; inches = 0; }

Distance(int ft, float in)// конструктор (2 аргумента)

{ feet = ft; inches = in; }

void getdist() // получить расстояние

// от пользователя

{

cout << "\nВведите футы:";cin >> feet;

cout << "Введите дюймы:";cin >> inches;

}

void showdist() // вывод расстояния

{ cout << feet << "\'-" << inches << '\"'; }

void add_dist(Distance, Distance);// объявления

void div_dist(Distance, int);

};

//---------------------------------------------------------

// сложение расстояний d2 и d3

void Distance::add_dist(Distance d2, Distance d3)

{

inches = d2.inches +d3.inches;// сложить дюймы

feet = 0; // (для возможного переноса)

if(inches >= 12.0) // если сумма превышает 12.0,

{ // уменьшить число дюймов

inches -= 12.0; // на 12.0 и

feet++; // увеличить число футов

} // на 1

feet += d2.feet +d3.feet; // сложить футы

}

//---------------------------------------------------------

// деление объекта Distance на целое число

void Distance::div_dist(Distance d2, int divisor)