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

на главную

Жанры

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

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

Шрифт:

5. Чем отличается конструктор-копировщик от оператора присваивания (=)?

Оператор присваивания работает с существующим объектом, а конструктор-копировщик создает новый временный объект.

6. Что представляет собой указатель this?

Это скрытый параметр в каждой функции-члене, который указывает на сам объект.

7. Как различить перегрузку префиксных и постфиксных операторов приращения?

Префиксный оператор не принимает никаких параметров. Постфиксный оператор

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

8. Можно ли перегрузить operator+ для переменных типа short int?

Нет, для встроенных типов нельзя перегружать никаких операторов.

9. Допускается ли в C++ перегрузка operator++ таким образом, чтобы он выполнял в классе операцию декремента?

Правомочно, но этого делать не стоит. Операторы следует перегружать таким способом, который должен быть понятен любому читателю вашей программы.

10. Как устанавливается тип возврата в объявлениях функций операторов преобразования типов?

Никак. Подобно конструкторам и деструкторам, они не имеют никаких возвращаемых значений.

 Упражнения

1. Представьте объявление класса SimpleCircle (простая окружность) с единственной переменой-членом itsRadius (радиус). В классе должны использоваться конструктор и деструктор, заданные по умолчанию, а также метод установки радиуса.

class SimpleCircle

{

public:

SimpleCircle;

~SimpleCircle;

void SetRadius(int);

int GetRadiusO;

private:

int itsRadius;

};

2. Используя класс, созданный в упражнении !, с помошью конструктора, заданного по умолчанию, инициализируйте переменную itsRadius значением 5.

SimpleCircle::SimpleCircle:

itsRadius(5);

{ }

3. Добавьте в класс новый конструктор, который присваивает значение своего пара-

метра переменной itsRadius.

SimpleCircle::SimpleCircle(int radius):

itsRadius(radius)

{ }

4. Перегрузите операторы преинкремента и постинкремента для использования в ва-

шем классе SimpleCircle с переменной itsRadius.

const SimpleCircle& SimpleCircle::operator++

{

++(itsRadius);

return *this;

}

// постфиксный оператор Operator ++(int).

// Выборка, затем инкрементирование

const SimpleCircle SimpleCircle::operator++ (int)

// обьявляем локальный обьект класса SimpleCircle и инициализируем его значением

* this

SimpleCircle temp(*this);

++(itsRadius);

return temp;

}

5. Измените SimpleCircle таким образом, чтобы сохранять itsRadius в динамической области памяти и фиксировать существующие методы.

class SimpleCircle

{

public:

SimpleCircle;

SimpleCircle(int);

~SimpleCircle;

void SetRadius(int);

int GetRadius;

const SimpleCircle& operator++;

const SimpleCircle operator++(int);

private:

int *itsRadius;

};

SimpleCircle::SimpleCircle

{itsRadius = new int(5);}

SimpleCircle::SimpleCircle(int radius)

{itsRadius = new int(radius);}

SimpleCircle::~SimpleCircle

{

delete itsRadius;

}

const SimpleCircle& SimpleCircle::operator++

{

++(*itsRadius);

return <<this;

}

// Постфиксный оператор Operator++(int).

// Выборка, затем инкрементирование

const SimpleCircle SimpleCircle::operator++ (int)

{

// объявляем локальный объект класса SimpleCircle и инициализируем его значением

*this

SimpleCircle temp(<<this);

++(*itsRadius);

return temp;

}

6. Создайте в классе SimpleCircle конструктор-копировщик.

SimpleCircle::SimpleCircle(const SimpleCircle & rhs)

{

int val = rhs.GetRadius;

itsRadius = new int(val);

}

7. Перегрузите в классе SimpleCircle оператор присваивания.

SimpleCircle& SimpleCircle::operator=(const SimpleCircle & rhs)

{

if (this == &rhs)

return *tnis;

delete itsRadius;

itsRadius = new int;

*itsRadius = rhs.GetRadius;

return *this;

}

8. Напишите программу, которая создает два объекта класса SimpleCircle. Для создания одного объекта используйте конструктор, заданный по умолчанию, а второму экземпляру при объявлении присвойте значение 9. С каждым из объектов используйте оператор инкремента и выведите полученные значения на печать. Наконец, присвойте значение одного объекта другому объекту и выведите результат на печать.

#include <iostream.h>

class SimpleCircle

{

public:

// конструкторы

SimpleCircle;

SimpleCircle(int);

SimpleCircle(const SimpleCircle &);

~SimpleCircle {}

// методы доступа к данным

void SetRadius(int);

int GetRadius const;

// операторы

const SimpleCircle& operator++;

const SimpleCircle operator++(int);

SimpleCircle& operator=(const SimpleCircle &):

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

Пустоцвет

Зика Натаэль
Любовные романы:
современные любовные романы
7.73
рейтинг книги
Пустоцвет

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Магнатъ

Кулаков Алексей Иванович
4. Александр Агренев
Приключения:
исторические приключения
8.83
рейтинг книги
Магнатъ

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

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

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

Идеальный мир для Социопата 4

Сапфир Олег
4. Социопат
Фантастика:
боевая фантастика
6.82
рейтинг книги
Идеальный мир для Социопата 4

Мама из другого мира. Дела семейные и не только

Рыжая Ехидна
4. Королевский приют имени графа Тадеуса Оберона
Любовные романы:
любовно-фантастические романы
9.34
рейтинг книги
Мама из другого мира. Дела семейные и не только

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2

Маленькая слабость Дракона Андреевича

Рам Янка
1. Танцы на углях
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Маленькая слабость Дракона Андреевича