Джесс Либерти - Освой самостоятельно С++ за 21 день.
- Название:Освой самостоятельно С++ за 21 день.
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание
В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.
Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.
Освой самостоятельно С++ за 21 день. - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
8. Жучки: какие три ошибки обнаружит компилятор в этом коде?
class TV
{
public:
void SetStation(int Station);
int GetStation() const;
private:
int itsStation;
};
main()
{
TV myTV;
myTV.itsStation = 9;
TV.SetStation(10);
TV myOtherTv(2);
}
Нельзя обращаться к переменной itsStation непосредственно. Это закрытая пере- менная-член.
Нельзя вызывать функцию-член SetStation()npHMO в классе. Метод SetStation() можно вызывать только для объекта.
Нельзя инициализировать переменную-член itsStation, поскольку в программе не определен нужный для этого конструктор.
День 7
Контрольные вопросы
1. Можно ли в цикле for инициализировать сразу несколько переменных-счетчиков?
Можно, для этого в строке инициализации их следует разделить запятыми, например:
for <���х = 0. у = 10; х < 100; х++, у++)
2. Почему следует избегать использование оператора goto?
Оператор Goto выполняет переход в любом направлении к любой произвольной
строке программы. Это делает исходный код слишком запутанным, а следовательно, и трудным для понимания и дальнейшего обслуживания.
3. Можно ли с помошью оператора for организовать цикл, тело которого не будет выполняться?
Да. Если условие после инициализации оказывается ложным (FALSE), то тело цикла
for никогда не будет выполняться. Вот пример:
for (lnt х = 100; х < 100; х++)
4. Можно ли организовать цикл while внутри цикла for?
Да. Любой цикл может быть вложен внутрь любого другого цикла.
5. Можно ли организовать цикл, который никогда не завершится? Приведите пример.
Да. Ниже приведены примеры как для цикла for, так и для цикла wtiile:
for(;;)
{
// Этот цикл никогда не заканчивается!
}
whlle(1)
{
// Этот цикл никогда не заканчивается!
}
6. Что происходит при запуске бесконечного цикла?
Программа зависнет и придется перезагрузить компьютер.
Упражнения
1. Каким будет значение переменной х после завершения никла
for (int X = 0; X < 100; х++)?
100
2. Создайте вложенный цикл for, заполняющий нулями массив размером 10x10.
for (int = 0; i< 10; i++)
{
for ( int j = 0; j< 10; j++)
cout << О ;
cout << "\n";
}
3. Организуйте цикл for, счетчик которого изменяется от 100 до 200 с шагом 2.
for (int х = 100; х<=200; х*=2)
4. Организуйте цикл while, счетчик которого изменяется от 100 до 200 с шагом 2.
int х = 100;
while (х <= 200)
х+= 2:
5. Организуйте цикл do...while, счетчик которого изменяется от 100 до 200 с шагом 2.
int х = 100;
do
{
х+=2:
} while (х <= 200);
6. Жучки: найдите ошибку в приведенном фрагменте программы:
int counter = 0;
while (counter < 10)
{
cout << "counter: " << counter;
}
Нет выражения, в котором выполнялось бы приращение счетчика counter, поэтому цикл while никогда не закончится.
7. Жучки: найдите ошибку в приведенном фрагменте программы:
for (int counter = 0; counter < 10; counter++);
cout << counter << " ";
В конце строки задания цикла стоит точка с запятой, поэтому цикл выполняет только приращение счетчика. Программист, возможно, именно это и имел в виду, но если предполагался еще и вывод каждого значения переменной counter, то этого не произойдет.
8. Жучки: найдите ошибку в приведенном фрагменте программы:
int counter = 100;
while (counter < 10)
{
cout << "counter now: " << counter;
counter—-;
}
Счетчик counter инициализирован числом 100, но проверяемое условие таково, что, если значение переменной counter больше 10, выражение условия возвратит FALSE и тело цикла никогда не будет выполнено. Если первую строку заменить вариантом int counter = 5;, то этот цикл не закончится до тех пор, пока не выполнится обратный отсчет до минимально возможного значения счетчика. Поскольку тип счетчика int по умолчанию определяется как signed, то мы получим бесконечный цикл.
9. Жучки: найдите ошибку в приведенном фрагменте программы:
cout << "Enter a number between 0 and 5: ";
cin >> theNumber;
switch (theNumber)
{
case 0:
doZero();
case 1: // идем дальше
case 2: П идем дальше
case 3: // идем дальше
case 4: Ц идем дальше
case 5:
doOneToFive();
break;
default:
doDefault();
break;
}
После оператора case 0, видимо, должен быть оператор break. Если это не так, то ситуацию следовало бы разъяснить с помошью комментария.
День 8
Контрольные вопросы
1. Какой оператор используется для получения адреса переменной?
Для возвращения адреса любой переменной используется оператор получения адреса (&).
2. Какой оператор позволяет получить значение, записанное по адресу, содержащемуся в указателе?
Для доступа к значению, сохраненному по адресу, содержащемуся в указателе, используется оператор разыменования (*).
3. Что такое указатель?
Это переменная, которая содержит адрес другой переменной.
4. В чем различие между адресом, который хранится в указателе, и значением, записанным по этому адресу?
Адрес, сохраненный в указателе, — это адрес другой переменной. Значение, сохраненное по этому адресу, — это любое значение, сохраняемое в переменной, на которую ссылается указатель. Оператор разыменования (*) возвращает значение, сохраненное по адресу, который хранится в указателе.
5. В чем различие между оператором разыменования и оператором получения адреса?
Оператор разыменования (*) возвращает значение, хранящееся по адресу, на который ссылается указатель. А оператор получения адреса (&) возвращает адрес переменной в памяти.
6. В чем различие между следующими объявлениями: const int * ptrOne и int * const ptrTwo?
Выражение const int * ptrOne объявляет, что переменная ptrOne представляет собой указатель на постоянное целое число. Само это целое число не может быть изменено с помощью данного указателя.
Выражение int * const pi rTwo объявляет, что переменная ptrTwo является постоянным указателем на некоторое целое число. После такой инициализации этот указатель не может быть переназначен.
Упражнения
1. Объясните смысл следующих объявлений переменных.
• int * рОпе;
• int vTwo;
• int * pThree = &vTwo;
Ответы:
а) int * pOne: — объявляет указатель на целое значение;
б) int vTwo — объявляет целочисленную переменную;
в) int * pThroe = &vTwo; — объявляет указатель на целое значение и инициализирует его адресом переменной.
2. Допустим, в программе объявлена переменная yourAge типа unsigned short. Как объявить указатель, позволяющий манипулировать этой переменной?
unsigned short *рАgе = AyourAgo;
3. С помошью указателя присвойте переменной yourAge значение 50.
*рАge =50
4. Напишите небольшую программу и объявите в ней переменную типа int и указатель на этот тип. Сохраните адрес переменной в указателе. Используя указатель, присвойте переменной какое-либо значение.
int theInteger;
int *plnteger = &theInteger:
*plnteger = 5:
5. Жучки: найдите ошибку в следующем фрагменте программы:
#include
int main()
{
int *pInt;
*pInt = 9;
cout << " The value at pInt: " << *pInt;
return 0;
}
Указатель pInt должен быть инициализирован. Поскольку он не был инициализирован и ему не присвоен адрес какой-либо ячейки памяти, то он указывает на. случайное место в памяти. Присвоение этому случайному месту числа 9 является опасной ошибкой.
Читать дальшеИнтервал:
Закладка: