Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 73
Текст из файла (страница 73)
push { 'a' ) ;s2.push('x');si. push ( 'b' ) ;s2.push('y');si. push ( 'c' ) ;s2.push('z');for{i=0; i<3; i++) cout « "символ из стека si:" « sl.popO« "\n";for{i=0; i<3; i++) cout « "символ из стека s2:" « s2.pop()« "\n";return 0;2. ttinclude <iostream>^include <ctime>using namespace std;489Самоучитель C++490class t_and_d (time_t systime;public:t_and_d(time_t t) ; // конструкторvoid show() ;t_and_d : : t_and_d ( t ime_t t }{systime = t;}void t_and d::show(){cout « ctime{fisystime)}int main()'time_t x;x = time (NULL) ;t_and_d ob{x) ;ob . show { ) ;return 0;3. ^include <iostream>using namespace std;class box (double 1, w, h;double volume;public:box (double a, double b, double c)void vol ( ) ;box: :box (double a, double b, double c){1 = a;w = b;h - c;volume * 1 * w * h;ПриложениеВ,Ответынавопросыирешенияvoid box: :vol (}{cout « "Объем равен: " « volume « "\n";}int main(){box x(2.2, 3.97, 8.09), y(1.0, 2.0, 3.0);x .
vol { } ;y.volf) ;return 0;2.31. #include <iostream>using namespace std;class area_cl {public:double height;double width;class rectangle: public area__cl (public:rectangle (double h, double w) ;double area (} ;class isosceles: public area_cl {public :isosceles (double h, double w) ;double area () ;rectangle:: rectangle (double h, double w){height = h;width = w;}isosceles :: isosceles (double h, double w){height = h;width = w;упражнений_491492_Самоучительdouble rectangle: : area ()(return width * height;}double isosceles : : area { }{return 0.5 * width * height;}int mainOrectangle b(10.0, 5.0);isosceles i(4.0, 6.0);cout « "Прямоугольник: " « b.areaO « "\n"cout « "Треугольник: " « i.areaO « "\n";• return 0;2.51. // Класс стек, образуемый с помощью структуры#include <iostream>using namespace std;tdefine SIZE 10// Объявление класса stack для символовstruct stack {stack(); // конструкторvoid push(char ch); // помещает в стек символchar pop О; // выталкивает из стека символprivate:char stckfSIZE]; // содержит стек•int tos; // индекс вершины стека};// Инициализация стекаstack::stack()(cout « "Работа конструктора стека \п";tos=0;1// Помещение символа в стекvoid stack::push{char ch)C++Приложение В.
Ответы на вопросы и решения упражнений493'if(tos==SIZE) {cout « "Стек полон \п";return;stck[tos] = ch;tos++;// Выталкивание символа из стекаchar stack;:pop()if (tos==0) {cout « "Стек пуст \п";return 0; // возврат нуля при пустом стекеtos—;return stck{tos];гint main()i// образование двух, автоматически инициализируемых, стековstack si, s2;int i;si.push('a');s2.push('x');sl.push('b1);s2.push('y');si.push('c1);s2.push{'z'};for(i=0; i<3; i++) cout « "символ из стека si:" « sl.popO «"\n";for(i=0; i<3; i++) cout « "символ из стека s2:" « s2.pop() «"\n";return 0;2. ^include <iostream>using namespace std;union swapbytes {unsigned char с[2];unsigned i;swapbytes(unsigned x ) ;494 ____ СамоучительC++void swp() ;)!swapbytes : : swapbytes {unsigned x}{i = x;Ivoid swapbytes: :swp(}{unsigned char temp;temp = c[0};c[0] = c[l];c[l] = temp;}int main(){swapbytes ob(l) ;ob . swp ( } ;cout « ob.i;return 0;3.
Анонимное объединение представляет собой особый синтаксический механизм, который позволяет двум переменным совместно использовать одну иту же область памяти. Доступ к членам анонимного объединения можно реализовать непосредственно, без ссылки на объект. Члены анонимного объединения находятся в той же области видимости, что и само объединение.2.6#include <iostream>using namespace std;// Перегрузка функции abs() тремя способами// Функция abs() для целыхinline int abs{int n}1cout « "В функции absО для int\n";return n<0 ? -n: n;}// Функция abs{) для длинных целыхinline long abs(long n)ПриложениеВ.Ответынавопросыирешенияупражнений_495{cout « "В функции abs{) для long\n";. return n<0 ? -n: n;// Функция abs { ) для вещественных двойной точностиinline double abs (double n)icout « "В функции abs() для double \n";return n<0 ? -n: n;int main()cout « "Абсолютная величина -10:" « abs (-10) « "\n";cout « "Абсолютная величина -10L:" « abs(-lOL) « "\n";cout « "Абсолютная величина -10.01:" « abs(-lO.Ol) « "\nreturn 0;2.
Функция не может быть встраиваемой, поскольку содержит цикл for. Большинство компиляторов не поддерживает встраиваемые функции с циклами.2.71. ^include <iostrearn>using namespace std;ttdefine SI2E 10// Объявление класса stack для символовclass stack {char stck[SIZE]; // содержит стекint tos; // индекс вершины стекаpublic:stack () { tos = 0; }void push(char ch){if (tos==SIZE) {cout « "Стек полон";return;}stck[tos]=ch;tos-t-t-;496__СамоучительC++char pop ( }iif (tos==0) {cout « "Стек пуст";return 0; // возврат- нуля при пустом стекетtos — ;return stck[tos];int main ()(// образование двух, автоматически инициализируемых, стековstack si, s2;int i;si.
push { 'a' ) ;s2.push('x') ;sl.push('b') ;s2.push( 'y' ) ;si. push ( 'c' ) ;s2.push('2');11for(i=0; i<3; i++) cout « "символ из стека si:" « sl.popO «\n";for(i=0; i<3; i++) cout « "символ иэ стека s2 : " « s2.pop() «"\n";return 0;2. #include <iostream>^include <cstring>ttinclude <cstdlib>using namespace std;class strtype {char *p;int len;public:strtype (char *ptr)len = strlen(ptr);p=(char *) mallocilen + 1) ;if(!p} {cout « "Ошибка вьщеления памяти\п";exit ( 1 ) ;Приложение В. Ответы на вопросы и решения упражнений497Strcpyfp, ptr);~strtype() ( cout « "Освобождение p\n"; fгее (р); }void show()cout « p « " — длина: " « len;cout « "\n";int main()strtype si ("Это проверка"), з2{"Мне нравится C++"};si.
show () ;s2. show () ;return 0;Проверка усвоения материала главы 21. Конструктор — это функция, которая вызывается при создании объекта.Деструктор — это функция, которая вызывается при удалении объекта.2. ^include <iostream>using namespace std;class line {int len;public:line{int 1);line::line(int 1){len = 1;int i;for(i=0; i<len; i+4) cout « '*';}int main()line 1(10);return 0;Самоучитель C++4983. Ю 1000000 -0.00094. ^include <iostream>using namespace std;class area_cl {public:double height;double width;class rectangle: public area_cl {public:rectangle (double h, double w) { height *= h; width = w; }double area() { return height * width; }class isosceles: public area_cl {public :isosceles (double h, double w) { height = h; width = w; }double area() { return 0.5 * height * width; }class cylinder: public area_cl {public:cylinder (double h, double w) { height = h; width = w; }double area ()-Ireturn (2 * 3.1416 * (width/2) * (width/2)) + (3.1415 *height * width} ;int{mainOrectangle b ( 1 0 .
0 , 5 . 0 ) ;isosceles i ( 4 . 0 , 6 . 0 ) ;cylinder c ( 3 . 0 , 4 . 0 ) ;cout « "Прямоугольник: " « b . a r e a f ) « "\ncout « "Треугольник: " « i . a r e a f ) « "\n";cout « "Цилиндр: " « c . a r e a ( ) « "\n";return 0;5. Тело встраиваемой функции встраивается в программу. Это означает, чтореально функция не вызывается, что позволяет избежать потерь производительности, связанных с вызовом функции и возвращением функцией своегоПриложение В. Ответы на вопросы и решения упражнений499значения. Преимуществом встраиваемых функций является увеличение скорости выполнения программы, а их недостатком — увеличение ее объема.6.
^include <iostream>using namespace std;class myclass {int i, j;public:myclass(int x, int y) { i = x; j = y; }\.I rvoid show() { cout « i « " " « j; }int main{){myclass count(2, 3);count.show();return 0;7. Члены класса по умолчанию являются закрытыми. Члены структуры — открытыми.8. Да. Это определение анонимного объединения.Проверка усвоения материала в целом1. ^include <iostream>using namespace std;class prompt (int count;public:prompt{char *s] { cout « s; cin » count; }-prompt();prompt::-prompt(} {int i, j;for{i=0; i<count; icout « '\a ' ;for(j=0; j<32000; J4+); // паузаСамоучитель C++500int main ( }prompt ob( "Введите число: ");return 0;2.
#include <iostream>using namespace std;class ftoi {double feet;double inches;public :ftoi {double f ) ;);ftoi: : ftoi (double f)feet = f;inches = feet * 12;cout « feet « "футов равно " « inches « "дюймам. \n";int main()ftoi a (12.0) , b(99.0) ;return 0;3.
^include <iostream>^include <cstdlib>using namespace std;class dice {int val;public:void roll {) ;);void dice: :roll (){val = (rand() % 6) +1; // генерация чисел от 1 до 6cout « val « "\n";int main О{dice one, two;Приложение В. Ответы на вопросы и решения упражнений507one.roll();two.roll();one.roll ( ) ;two.roll () ;one.roll () ;two.roll { ) ;return 0;ГЛАВА 3Повторение пройденного1.
Конструктор называется widgit(), а деструктор - ~widgit().2. Конструктор вызывается при создании объекта (т. е., когда объект начинаетсуществовать). Деструктор вызывается при удалении объекта.3. class Mars: public planet {4. Функцию можно сделать встраиваемой, если перед ее определением поставить спецификатор inline, или если ее определение разместить внутри объявления класса.5. Встраиваемая функция должна быть определена перед ее первым использованием. В ней не должно быть циклов.