Программирование >>  Дополнительные возможности наследования 

1 ... 243 244 245 [ 246 ] 247 248 249 ... 265


13 14 15 16 17 18 19 20 21 22 23 24 25 26

CAT & MakeCat(int age);

int mainO

int age = 7;

CAT Boots = MakeCat(age);

cout Boots is Boots. GetAgeO years old\ n ; return 0;

CAT & MakeCat(int age) {

CAT pCat = new CAT(age); return *pCat;

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

9. Исправьте программу из упражнения 8.

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Sinclude <iostrean.h>

class CAT {

public;

CAT(int age) { itsAge = age; } CAT(){ }

int GetAgeO const { return itsAge;} private;

int itsAge;

CAT . MakeCat(int age);

int mainO

int age = 7;

CAT * Boots = MakeCat(age);

cout Boots is Boots. GetAgeO years old\ n ;

delete Boots; return 0; }

CAT MakeCat(int age) {

return new CAT(age);



День ID

Контромиые вовросы

1. Если вы перегрузили функцию-член, как потом можно будет различить разные варианты функции?

Перефуженными называются функции-члены, которые имеют одно и то же имя, но отличаются по количеству или типу парамефов.

2. Какая разница между определением и объявлением?

Определение резервирует память, а объявление - нет. Объявления часто являются и определениями, за исключением объявлений классов, прототипов функций и новых типов с помощью typedef.

3. Когда вызывается консфуктор-копировщик?

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

4. Когда вызывается десфуктор?

Десфуктор вызывается при удалении объекта либо по причине выхода за пределы области видимости, либо при вызове оператора delete для указателя, указывающего на данный объект.

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

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

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

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

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

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

8. Можно ли перефузить operator+ для переменных типа short int? Нет, для встроенных типов нельзя перефужать никаких операторов.

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

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

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

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



Упражнения

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

class SimpleCircle {

public:

SimpleCircleO;

SimpleCircleO;

void SetRadius(int);

int GetRadiusO; private:

int itsRadius;

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

SimpleCircle::SimpleCiгс1е();

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 в динамической области памяти и фиксировать существующие методы.



1 ... 243 244 245 [ 246 ] 247 248 249 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика