LibKing » Книги » comp-programming » Джесс Либерти - Освой самостоятельно С++ за 21 день.

Джесс Либерти - Освой самостоятельно С++ за 21 день.

Тут можно читать онлайн Джесс Либерти - Освой самостоятельно С++ за 21 день. - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Джесс Либерти - Освой самостоятельно С++ за 21 день.
  • Название:
    Освой самостоятельно С++ за 21 день.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание

Освой самостоятельно С++ за 21 день. - описание и краткое содержание, автор Джесс Либерти, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.

Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. - читать онлайн бесплатно полную версию (весь текст целиком)

Освой самостоятельно С++ за 21 день. - читать книгу онлайн бесплатно, автор Джесс Либерти
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

6. Жучки: найдите ошибку в следующем фрагменте программы:

int main()

{

int SomeVariable = 5.

cout << "SomeVariable: " << SomeVariable << "\n";

int *pVar = & SomeVariable;

pVar = 9:

cout << "SomeVariable: " << *pVar << "\n":

return 0;

}

Возможно, программист хотел присвоить число 9 переменной, на которую указывает указатель pVar. К сожалению, число 9 было присвоено самому указателю pVar, поскольку был опушен оператор косвенного доступа (*)• Если указатель pVar используется для присвоения ему значения, такое программирование неминуемо приведет к тяжелым последствиям.

День 9

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

1. В чем разница между ссылкой и указателем?

Ссылка — это условное название (псевдоним), а указатель — это переменная, которая содержит адрес. Ссылки не могут быть нулевыми и не могут переназначаться.

2. Когда нужно использовать именно указатель, а не ссылку?

Если в программе нужно назначить указателю новую переменную или если указатель нужно сделать нулевым.

3. Что возвращает оператор new, если для создания нового объекта недостаточно памяти?

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

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

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

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: " << <<< endl;

delete pint;

return temp;

}

8. Жучки: что неправильно в этой программе?

1: #include

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

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 для указателя, указывающего на данный объект.

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

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

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

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

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

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

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

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

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

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

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

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

Упражнения

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

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Джесс Либерти читать все книги автора по порядку

Джесс Либерти - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Освой самостоятельно С++ за 21 день., автор: Джесс Либерти. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img