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

на главную - закладки

Жанры

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

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

Шрифт:

Нулевой указатель.

4. Что представляет собой константная ссылка?

Это сокращенный вариант определения ссылки на константный объект.

5. В чем разница между передачей объекта как ссылки и передачей ссылки в функцию?

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

 Упражнения

1. Напишите

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

int main

{

int varOne;

int& rVar = varOne;

int* pVar = &varOne;

rVar = 5:

*pVar = 7:

return 0;

}

2. Напишите программу, которая объявляет константный указатель на постоянное целое значение. Инициализируйте его, чтобы он указывал на целочисленную переменную varOne. Присвойте переменной varOne значение 6. Используйте указатель, чтобы присвоить переменной varOne значение 7. Создайте вторую целочисленную переменную varTwo. Переназначьте указатель, чтобы он указывал на переменную varTwo. Пока не компилируйте это упражнение.

int main

{

int varOne;

const int * const pVar = dvarOne;

*pVar = 7;

int varTwo;

pVar = &varTwo.

return 0;

}

3. Скомпилируйте программу, написанную в упражнении 2. Какие действия компилятор считает ошибочными? Какие строки генерируют предупреждения?

Нельзя присваивать значение константному объекту и нельзя переназначать константный указатель.

4. Напишите программу, которая создает блуждающий указатель.

int main

{

int >> pVar;

*pVar = 9;

return 0;

}

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

int main

{

int varOne;

int * pVar = ivarOne;

*pVar = 9;

return 0.

}

6. Напишите программу, которая приводит к утечке памяти.

#include <iostream.h>

int * FuncOne;

int main

{

int * pInt = FuncOneO;

cout << "the value of pint in main is: " << *pInt << endl:

return 0;

}

int * FuncOne

{

int * pInt = new int (5):

cout << "the value of pint in FuncOne is: " << *pInt << endl:

return pInt;

}

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

#include <iostream.h>

int FuncOne;

int main

{

int theInt = FuncOne;

cout << "the value of pint in main is: " << theInt << endl;

return 0:

}

int FuncOne

{

int * pInt = new int (5);

cout << "the value of pint in FuncOne is: " << <<pInt << endl;

delete pint;

return temp;

}

8. Жучки:

что неправильно в этой программе?

1: #include <iostream.h>

3: class CAT

4: {

5: public:

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

7: ~CAT{ }

8: int GetAge const { return itsAge; }

9: private:

10: int itsAge:

11: };

12:

13: CAT & MakeCat(int age):

14: int main

15: {

16: int age = 7;

17: CAT Boots = MakeCat(age);

18: cout << "Boots is " << Boots.GetAge << " years old\n";

19: return 0:

20: }

22: CAT & MakeCat(int age)

23: {

24: CAT * pCat = new CAT(age);

25: return *pCat;

26: }

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

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

1: #include <iostream.h>

2:

3: class CAT

4: {

5: public:

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

7: ~CAT{ }

8: int GetAgeO const { return itsAge;}

9: private:

10: int itsAge;

11: };

13: CAT * MakeCat(int age);

14: int main

15: {

16: int age = 7;

17: CAT * Boots = MakeCat(age);

18: cout << "Boots is " << Boots.GetAge << " years old\n";

19: delete Boots;

20: return 0;

21: }

23: CAT * MakeCat(int age)

24: {

25: return new CAT(age);

26: }

День 10

Контрольные вопросы 

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

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

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

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

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

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

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

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

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

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Инженер Петра Великого

Гросов Виктор
1. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого

Колонист "Вано"

Сухов Лео
1. Антикризисный Актив
Фантастика:
героическая фантастика
попаданцы
7.17
рейтинг книги
Колонист Вано

Блуждающие огни 4

Панченко Андрей Алексеевич
4. Блуждающие огни
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Блуждающие огни 4

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

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

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

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Тигр под елку

Зайцева Мария
4. Наша
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Тигр под елку