Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
1
empty-line
4
С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
[ Советы ]
_________________
137 стр. Глава 10. Отладка программ на С++
Команда Debugs => Next Step ( Отладка => Следующий шаг ) рассматривает вызов функции как единую команду. Однако на самом деле функция состоит из ряда отдельных инструкций С++, и для отладки нам надо пройти их пошагово. Такая функциональность обеспечивается командой Debug => Step Into ( Отладка => Шаг внутрь ) .
Перегрузите программу при помощи пункта меню Debug => Program Reset ( Отладка => Остановить выполнение ) либо соответствующей пиктограммы на панели отладки или клавиш . Теперь, чтобы сэкономить время, отключите установленную точку останова, щёлкнув на красном кружке, и установите новую на вызове функции stringEmUp( ) , как показано на рис. 10.4.
Рис. 10.4. Установка точки останова на вызове функции stringEmUp( )
«Вы можете установить в программе столько точек останова, сколько вам требуется.»
[ Советы ]
Теперь перезапустите программу на выполнение, и она остановится на вызове функции StringEmUp( ) .
Войдите в функцию, воспользовавшись командой Debug => Step into ( Отладка => Шаг внутрь ) , как показано на рис. 10.5.
Допустим, вы обнаружили, что ваша программа время от времени работает некорректно. Чтобы лучше понять, почему это происходит, желательно знать, какие аргументы передаются в рассматриваемую функцию. Для этого нужна функция наблюдения за переменными, предоставляемая отладчиком, которая позволяет ознакомиться с содержимым всех переменных при каждом останове выполнения. Проще всего установить наблюдение за переменной, выбрав её в окне редактора и нажав клавишу . На рис. 10.6 показано, как выглядят четыре аргумента рассматриваемой функции.
_________________
138 стр. Часть 2. Становимся функциональными программистами
Рис. 10.5. Команда Debug => Step Into ( Отладка => Шаг внутрь ) позволяет выполнить вызов функции пошагово
Рис. 10.6. Отладчик позволяет следить за значениями переменных
_________________
139 стр. Глава 10. Отладка программ на С++
Числа возле имён переменных в окне отладки — адреса, которые в данном случае малоинформативны. Строка szTarget пока что пуста, что вполне закономерно, так как мы ещё ничего в неё не скопировали. Значение строки szString1 также выглядит вполне корректно, но вот значение szString2 содержит сразу две строки — и "This is a string" , и "THIS IS A STRING" , чего вроде бы быть не должно.
Ответ находится в четвёртой переменной. Дело в том, что длина этих двух строк не 16 символов, а 17! Программа не выделила память для завершающего нуля, что и приводит к сбою при выполнении функции StringEmUp( ) .
«Длина строки всегда включает завершающий нулевой символ.»
[ Помни! ]
Давайте изменим программу, исправив ошибку. Пусть теперь С++ сам рассчитывает размер строк. Получившаяся в результате программа Concatenate2.срр , приведённая ниже, работает вполне корректно.
/* Concatenate — конкатенация двух строк со вставкой " - " между ними. */
#include
#include
#include
#include
using namespace std ;
void StringEmUp( char* szTarget ,
char* szSource1 ,
char* szSource2 ) ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
/* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */
setlocale (LC_ALL,".1251");
cout << "Конкатенация двух строк со вставкой \" - \"\n"
<< "( В этой версии нет ошибки. )" << endl ;
char szStrBuffer[ 256 ] ;
/* Определение двух строк... */
char szString1[ ] = "This is a string" ;
char szString2[ ] = "THIS IS A STRING" ;
/* ...и объединение их в одну */
StringEmUp( szStrBuffer ,
szString1 ,
szString2 ) ;
/* Вывод результата */
cout << "<" << szStrBuffer << ">" << endl ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
_________________
140 стр. Часть 2. Становимся функциональными программистами
void StringEmUp( char* szTarget ,
char* szSource1 ,
char* szSource2 )
{
strcpy( szTarget , szSource1 ) ;
strcat( szTarget , " - " ) ;
strcat( szTarget , szSource2 ) ;
}
Вот вывод этой программы — именно такой, какой мы и ожидали:
Конкатенация двух строк со вставкой " - "
( В этой версии нет ошибки. )
Press any key to continue...
! ! ! ! ! ! ! ! ! ! ! ! ! !
Поздравляю! Вам удалось отладить программу.
! ! ! ! ! ! ! ! ! ! ! ! ! !
_________________
141 стр. Глава 10. Отладка программ на С++
ОГЛАВЛЕНИЕ
СОДЕРЖАНИЕ
Глава 11. ЗНАКОМСТВО С ОБЪЕКТНО-ОРИЕНТИРОВАННЫМ ПРОГРАММИРОВАНИЕМ...145
Глава 12. КЛАССЫ В С++...149
Глава 13. РАБОТА С КЛАССАМИ...154
Глава 14. УКАЗАТЕЛИ НА ОБЪЕКТЫ...167
Глава 15. ЗАЩИЩЁННЫЕ ЧЛЕНЫ КЛАССА: НЕ БЕСПОКОИТЬ!...181
Глава 16. СОЗДАНИЕ И УДАЛЕНИЕ ОБЪЕКТОВ...188
Глава 17. АРГУМЕНТАЦИЯ КОНСТРУИРОВАНИЯ...198
Глава 18. КОПИРУЮЩИЙ КОНСТРУКТОР...213
Глава 19. СТАТИЧЕСКИЕ ЧЛЕНЫ...224
В этой части...
Основным отличием С++ от других языков является возможность объектно-ориентированного программирования. Термин объектно-ориентарованный — один из самых популярных в современном компьютерном мире. Языки программирования, редакторы и базы данных — буквально все претендуют на звание объектно-ориентированных. Иногда так оно и есть, но часто такое определение даётся исключительно в рекламных целях.
На прилагаемом компакт-диске имеется программа BUDGET2 , которая поможет вам разобраться в этих объектно-ориентированных концепциях.
ОГЛАВЛЕНИЕ
Читать дальшеИнтервал:
Закладка: