И.А. Волкова, А.А. Вылиток, Л.Е. Карпов - Сборник задач и упражнений по языку Си++, страница 4
Описание файла
PDF-файл из архива "И.А. Волкова, А.А. Вылиток, Л.Е. Карпов - Сборник задач и упражнений по языку Си++", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Что будет выдано в стандартный поток вывода при работе следующей программы?void f(X & x, int n);struct X {X () {try { f(*this, -1);cout << "a"; }catch (X){ cout << "b"; }catch (int){ cout << "c"; }}X (X &) { cout << "d"; }35virtual ~X () { cout << "e"; }};struct Y: X {Y () { try {f(*this, 0);cout << "f"; }catch (Y) { cout << "g"; }catch (int){ cout << "h"; }cout << "i";}Y (Y &){ cout << "j"; }~Y (){ cout << "k"; }};void f(X & x, int n) { try{ if (n < 0)else if (nelse throwcatch (int){ coutthrow -n;== 0) throw x;n;}<< "l"; }}int main() { try { Y a; }catch (...){ cout << "m"; return 1; }cout << "n"; return 0;}5.11.
Что будет выдано в стандартный поток вывода при работе следующей программы?void f(X & x, int n);struct X {X () { try { f(*this, 0); cout << "a"; }catch (X){ cout << "b"; }catch (int){ cout << "c"; }}X (X &) { cout << "d"; }virtual ~X () { cout << "e"; }};struct Y: X {Y () { try { f (*this, 0); cout << "f"; }catch (Y) { cout << "g"; }catch (int) { cout << "h"; }cout << "i";}Y (Y &) { cout << "j"; }~Y () { cout << "k"; }};void f(X & x, int n) {try { if (n < 0) throw -n;else if (n == 0) throw x;else throw n;}catch (int) { cout << "l"; }}36int main() { try { Y a; }catch (...) { cout << "m"; return 1; }cout << "n";return 0;}5.12. Что будет выдано в стандартный поток вывода при работе следующей программы?void f(X & x, int n);struct X {X () { try { f(*this, 1); cout << "a"; }catch (X){ cout << "b"; }catch (int){ cout << "c"; }}X (X &){ cout << "d"; }virtual ~X () { cout << "e"; }};struct Y: X {Y () { try { f (*this, 1);cout << "f"; }catch (Y){ cout << "g"; }catch (int){ cout << "h"; }cout << "i";}Y (Y &){ cout << "j"; }~Y (){ cout << "k"; }};void f(X & x, int n) {try { if (n < 0) throw -n;else if (n == 0) throw x;else throw n; }catch (int){ cout << "l"; }}int main() { try { Y a; }catch (...){ cout << "m"; return 1; }cout << "n"; return 0;}5.13.
Что напечатает следующая программа?struct S {S ( int a) {try { if (a > 0) throw *this;else if (a < 0) throw 0;}catch ( S & ) { cout << “SCatch_S&” << endl; }catch (int) { throw; }cout << “SConstr” << endl;}S (const S & a) { cout << “Copy” << endl; }~S ( ) { cout << “Destr” << endl; }};37intmain ( ) {try{ Ss1(1), s2(-2);cout << “Main” << endl;}catch (S &) {catch ( ... )return 0;cout << “MainCatch_S&” << endl;}{ cout << “MainCatch_...” << endl; }}5.14. Что напечатает следующая программа?struct S {S ( int a) {try { if (a > 0)throw *this;elseif (a < 0) throw 0;}catch ( S & ) {cout << “SCatch_S&” << endl; }catch (int) { throw; }cout << “SConstr” << endl;}S (const S & a) { cout << “Copy” << endl; }~S ( ) { cout << “Destr” << endl; }};intmain ( ) {try {Ss1( 0 ),s2 ( 5 );cout << “Main” << endl;}catch (S &) {cout << “MainCatch_S&” << endl;}catch ( ...
) {cout << “MainCatch_...” << endl;}return 0;}5.15. Что напечатает следующая программа?struct S {S (int a) {try{if (a > 0) throw *this;else if (a < 0) throw 0;}catch ( S & ) { cout << “SCatch_S&” << endl; throw;}catch (int) { cout << “SCatch_int” << endl; }cout << “SConstr” << endl;}S (const S & a) { cout << “Copy” << endl; }~S ( ) { cout << “Destr” << endl; }};intmain ( ) {try {Ss1(-3),s2(25);cout << “Main” << endl;}catch (S &) {cout << “MainCatch_S&” << endl;}catch ( ... ) {cout << “MainCatch_...” << endl;}return 0;}386.Константные и статические члены класса.6.1.Есть ли ошибки в тексте приведенной программы? Можно ли исправить описание класса, не вводя дополнительных членов, чтобы программа стала верной?Если да, то как?class A {public:int y;void f() {cout << "f" << endl;}};int A::y;int main () {A::y = 1;const A a;a.f();return 0;}6.2.Есть ли ошибки в тексте приведенной программы? Можно ли исправить описание класса, не вводя дополнительных членов, чтобы программа стала верной?Если да, то как?class X {public:void g () {cout << "g" << endl;}int h (int n) {cout << "f" << endl; return n}};int main () {int k;const X x;X::g();k = x.h(5);return 0;}6.3.
Есть ли синтаксические ошибки в тексте приведенной программы? Можно лиисправить описание класса, не вводя дополнительных членов и не убирая имеющиеся, чтобы программа стала верной? Если да, то как?a)class A {static int i;static void f() {g();cout << “f()” << endl;}void g() {if (i >= 0)i = -1, f();cout << “g ()” << endl;}};int A::i = 1;39int main () {A::i = 1;A a;a.f();a.i = 0;return 0;}b)class A {static int i;void f() {if (i >= 0)i = -1, g();cout << "f()" << endl;}void g() {f();cout << "g()" << endl;}};int A::i = 1;int main () {A::i = 1;const A a;a.f();a.i = 0;return 0;}c)class A {static int i;void f() const {if (i < 0)g(i);cout << "f ()" << endl;}void g(int & n) {i = n;f();cout << "g ()" << endl;}};int A::i = 1;int main () {const A a;a.g(2);return 0;}6.4.
Опишите класс А таким образом, чтобы были верными все конструкции следующего фрагмента программы:a)int A::x;int main () {const A a;40a.x = 1;a.get_0();return 0;}b)const char A::a = '+';int main () {A ob;A::f();return 0;}c)int main () {const A x;A::g();x.h();return 0;}6.5. Если есть ошибки в приведенной программе, то объясните, в чем они заключаются. Ошибочные операторы или ключевые слова вычеркните (допускается не болеедвух вычеркиваний). Что будет выдано в стандартный поток вывода при работе получившейся программы?class A {public:static void f(int x) {h (x);cout << "A::f," << x <<}void g() {cout << "A::g" << endl;}void h(int x) {g ();cout << "A::h," << x <<}};class B: virtual public A {public:static void f(int x) {h (x);cout << "B::f," << x <<}void g() {cout << "B::g" << endl;}void h (int x) {g ();cout << "B::h," << x <<}};endl;endl;endl;endl;int main() {B::f(0);B b;A * p = & b;p -> f(1);p -> g();41p -> h(2);A::f(3);return 0;}6.6.
Есть ли ошибки в интерфейсах классов C и D программы? Если есть, то объясните, в чем они заключаются и внесите нужные исправления, оставив без измененияреализацию классов и функции main (). Что будет выдано в стандартный поток выводапри работе получившейся программы?class C {public:C(int x = 0) {}virtual int f(int x) {cout << "C::f," << x << endl;return h (x);}virtual int g() {cout << "C::g" << endl;return 1;}virtual int h (int x) {cout << "C::h," << x << endl;return x;}virtual operator int () { return 99; }};class D: public C {public:int f(int x) {cout << "D::f," << xreturn h (x);}int g(int x) {cout << "D::g"return 1;}int h(int x) {cout << "D::h," << xreturn x;}D(int x = 0) {}operator int () { return};<< endl;<< endl;<< endl;100; }int main() {const D d;C const * const t = & d;t -> f(3);t -> f(d);t -> g();t -> h(5);return 0;}426.7.
Добавить (если нужно) в класс А служебные слова const, так, чтобы заданныйфрагмент программы был верным.a)class A {int i;public:A(int x) { i = x; }A(A & y) { i = y.i; }const A f(const A & z) {cout << endl;return *this;}};const A t1( ) {const A a = 5;return a.f( a );}b)class A {int i;public:A(int x) { i = x; }A(A & y) { i = y.i; }const A f(A & c) const {cout << c. i << endl;return *this;}};const A t1(const A a) {A b = A(5);return b.f( a );}c)class A {int i;public:A(int x) { i = x; }A(A & y) { i = y.i; }const A f( const A c) {cout << c.i << endl;return *this;}};const A t1(const A * a) {A b = A(3);return a -> f( b );}6.8. В приведённой программе возможно наличие синтаксических ошибок в определении класса A.
Если ошибки есть, исправьте их заменой, исключением или добавлением нужных служебных слов языка Си++. Обоснуйте сделанные исправления.43a) class A {int i;int f(int & x) { return g(x); }int g(int & x) {if (x >= 0) f(-i);return i;}};int A::i = 2013;int main () {const A a;A::i = 201;a.f(20);return a.i = 1;}b) class A {int x;int y;int p() {return y >= 0 ? y = -1 :q();}int q() const { return p(); }int r() { return x = y; }A(int z) { x = y > 0 ? z % y : -y; }};int A::y = 13;int main() {A::y = 1;A::p();const A b1(2013), b2(b1);b1.q();return b2.x = 2;}c) class A {int m;void m1() { if (m < 0) m2(m); }int m2(int & n) const { return m1(),n; }void m3(int & n) { m = m2(n); }};int A::m = 1;int main() {A::m3 (2013);A mm;return mm.m2 (3);}447.Динамическая идентификация и приведение типов7.1.
Укажите лишние и ошибочные операции динамического приведения типа, еслитаковые имеются в функции main (). Дайте необходимые пояснения своим исправлениям.classclassclassclassclassclassKL:M:P:Q:R:publicpublicpublicpublicpublicKKLMPclass S: public Q{{{{{{public:public:public: virtualpublic:public: virtualpublic: virtualvirtual{ public: virtualvirtualint main (){S os, * s = & os; Kint a, b;k = dynamic_cast <Kl = dynamic_cast <Lp = dynamic_cast <Pr = dynamic_cast <Rreturn 0;}voidvoidvoidvoidvoidvoidvoidvoidvoidgfhfhfhfh() {() {() {() {() {() {() {() {() {coutcoutcoutcoutcoutcoutcoutcoutcout<<<<<<<<<<<<<<<<<<"K::g";"L::f";"M::h";"P::f";"Q::h";"R::f";"R::h";"S::f";"S::h";}}}}}}}}}};};};};};};};* k; L * l; M * m; P * p; Q * q; R * r;*>(s);*>(k);*>(l);*>(q);smqs====dynamic_castdynamic_castdynamic_castdynamic_cast<S<M<Q<S*>(k);*>(s);*>(m);*>(p);7.2.