Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 158 159 160 161 162 163 < 164 > 165 166 167 168 169 170 .. 206 >> Следующая

}
3. Здесь показана основная форма оператора new, используемая для инициализации динамических переменных:
укааагаль_яа_лвременную = new тт(иішіщализирукхц&е_зяачеяие) ;
Например, в следующем фрагменте выделяется память для целого и этому целому присваивается значение 10:
int *р;
р = new int(10);
4. #include <iostream>
using namespace std;
class samp { int x; public:
samp (int n) { x = n; }
530
Самоучитель
int getx () { return x; }
};
int raaint)
{
samp A[10] ^ { 1, 2f
int і ;
for(i^Q; i<10; i++) cout << n\nH; return 0 ;
5. Достоинства: Ссылка в качестве параметра при вызове функции не приводит к появлению копии объекта. Передача параметра по ссылке часто быстрее, чем его передача по значению. Параметр-ссылка упрощает синтаксис и процедуру вызова функции по ссылке > снижая вероятность ошибки.
Недостатки: Изменения в параметре-ссылке меняют и используемую в вызове исходную переменную, следовательно параметр-ссылка открывает возможность сторонних эффектов в вызывающей программе.
6. Нет.
7. #include <iostream>
using namespace std;
void mag (long &num, long order); int main(}
long n = 4 ; long o-2;
cout << "Значение 4, увеличенное на два порядка равно
mag (п, о) ;
cout « п << 1\п1 ;
return 0;
}
void mag (long &num, long order)
{
for (; order; order --) num = пші * 10;
3, 4, 5, 6, 7, 8, 9, 10 } ;
cout « A[ і ] . getx ( ) << 1 1 ;
Приложение 8. Ответы на вопросы и решения упражнений
Упражнения
5.1
1. #include <iostream>
#include <cstring>
#include <cstdlib> using namespace std;
class strtype { char *p; int len; public:
strtype();
¦strtype(char *s, int 1); char *getstring() { return p; }
int getlength{) { return len; }
};
strtype::strtype(}
{
p — new char[255]; if ? ip) {
cout << "Ошибка выделения памяти\п"; exit(1J;
}
*p = T\0'; // нулевая строка
len = 255;
}
strtype::strtype(char *s, int 1)
{
if(strlen(s) >=1) {
cout « "Выделено слишком мало памяти exit (1) ;
}
р = new char Cl J ; if(!p) {
cout << "Ошибка вьщеления ламятиХл1’; exit(1);
}
strcpy(p, s); len = 1;
)
int main ()
532
Самоучитель C++
[
strtype sl;
strtype s2 ("Это проверка", 100);
cout « "Строка sl: tr << sl.getstring () « "-Длиной:
cout « sl .getlength () « "\n";
cout << "Строка s2: 41 « s2.getstring (} << "-Длиной: M;
cout « s2.getlength () « "\п";
return 0;
}
2. // Имитация секундомера
ttinclude <iostrearn>
#include <ctiine>
using namespace std;
class stopwatch {
double begin, end; public:
stopwatch(); stopwatch (clock_t t};
-stopwatch{); void start () ; void stop () ; void showf) ;
stopwatch::stopwatch()
{
begin — end = 0.0; stopwatch: : stopwatch(clock__tt)
{
begin = (double) t / CLOCKS_PER_SEC; end = 0.0;
J
stopwatch::~stopwatch{)
і
cout « "Удаление объекта stopwatch show() ;
і
void stopwatch: : start (}
{
begin = (double) clock () / CLOCKS_PER_SEC;
Приложение В. Ответы на вопросы и решения упражнений___________________________533
void stopwatch::stop ()
(
end - (double) clock О / CLOCKS_PER_S?C;
}
void stopwatch::show О
cout << "Истекшее время: " << end — begin;
cout « "\n";
I
int main()
I
stopwatch watch; long і ;
watch.start();
for{i=0; K3200000; i+-t*) ; // время цикла
watch.stop(); watch.show(};
// Создание объекта с использованием его начального значения stopwatch s2 (clock());
for{i=0; i<250000; І++) ; // время цикла s2.stop();
s2 . show () ;
return 0;
}
5.2
1. Для объектов obj и temp вызывается обычный конструктор. Однако, когда объект temp становится возвращаемым значением функции f{), создается временный объект, который генерирует вызов конструктора копий.
#include <iostream> using namespace std;
class myclass { public:
myclass () ;
myclass (constmyclass &o) ; myclass f();
);
// Обычный конструктор
534
Самоучитель C++
myclass: :myclass()
{
cout « "Работа обычного конструктора\n" ;
}
// Конструктор копий
myclass: :myclass (const myclass So)
{
cout «: "Работа конструктора копий\п";
}
// Возвращение объекта myclass myclas s •. : f ()
{
myclass temp; return temp;
I
int main ( )
{
myclass obj ; obj=obj . f ();
return 0 ;
}
2. В соответствии с программой, когда объект передается в функцию getval(), создается его поразрядная копия. Когда функция getva]() возвращает свое значение и копия удаляется, выделенная для этого объекта память (на которую указывает указатель р) освобождается. Однако эта память по-прежнему требуется исходному объекту, который использовался при вызове функции getvalQ. Далее представлена исправленная версия программы. Для решения проблемы потребовался конструктор копий.
Предыдущая << 1 .. 158 159 160 161 162 163 < 164 > 165 166 167 168 169 170 .. 206 >> Следующая