И.А. Волкова, А.А. Вылиток, Л.Е. Карпов - Сборник задач и упражнений по языку Си++ (1119397), страница 2
Текст из файла (страница 2)
Для каждого вызова перегруженной функции с одним параметром укажите, какая функция и на каком шаге алгоритма будет выбрана.а)int f(int a = 0) { return a; }int f(double a) { return a; }int main() {short int s;int i;bool b;enum e {A, B, C};float f1 = 1.0f;f();f(s);f(f1);f(b);f(A);}b) int f(double a = 1.0){return a;}int f(long double a = 5.0){return a;}int main() {float f1 = 1.0f;double d = 2.0;long double ld = 3.0l;f();f(4);f(f1);f(d);f(ld);}c)int f(int a = 1){return a;}int f(long double a = 5.0){return a;}int main () {short int s;int i;bool b;float f1 = 1.0f;double d = 2.0;f(s);f(i);f(b);f(f1);f(d);}123.Наследование.
Видимость и доступность имен3.1. Если есть ошибки в реализации функций B::g () и main (), объясните, в чем онизаключаются.Для всех правильных операторов этих функций с помощью операции разрешения области видимости «::» укажите, из какой области видимости выбираются участвующие в их записи имена.Какие конструкторы и деструкторы и в каком порядке будут вызываться при работе данной программы?a)int x = 0;void f (int a, int b){x = a+b;}class A {int x;public:void f (){x = 2;}};class B: public A {public:void f (int a){::x = a;}void g ();};void B::g() {f();f(1);f(5 , 1);x = 2;}Bret (B & x, B & y) {return x;}int main () {B b;f(5);f('+', 6);b = ret (b,return 0;}b)b);double a = 0;void f (double x){a = x;}struct A {double a;void f (){a = 2;}};13class B : A {public:void f (int a){::a = a;}void g ();};void B::g() {f(1.2);f();a = 2;}voidempty (B & a, Bb) { }int main () {B d;f();f(6);empty (d, d);return 0;}c)int x = 0;void f(int a, int b) { x = a+b; }class A {int x;public:void f() { x = 2; }void f(char a1, char b1) { x = a1-b1; }};class B: public A {public:void f(int a) { ::x = a; }void g () {f();f(0);f(5.3 , 1);x = 1;}};int main () {B b;f(2);f(3, 'a');return 0;}d)double a = 0;void f(double x = 2) {a = x;}void f() {a = 1;}14struct BBase {double a;void f(){a = 2;}};class B: BBase {public:void f(int a) { ::a = a; }void g() {f('r');f();a = 2;}};int main () {B d;f();f(6);return 0;}e)float y = 0;void f(float a) {y = a;}class T {int y;public:void f() {y = 2;}};class B : public T {public:void f(float n, float m) { ::y = n * m; }void f(char c1, char c2) { ::y = c1 + c2; }void g () {f();f(1);f(-1 , 1);y = 2;}};int main () {B b;f(5);f('+', 6);return 0;}153.2.
Если есть ошибки в реализации методов заданных классов и функции main (),исправьте их, используя операцию разрешения области видимости «::».Какие конструкторы и деструкторы и в каком порядке будут вызываться при работе данной программы?a)int x = 0;int f (int a, int b) { return x = a + b; }class A {int x;public:A (int n = 1) { x = n; }int f() { return ::x = x; }};class B {int x;public:B (int n = 2) { x = n; }};class C: public A, public B {int x;public:int f(int a) { return ::x = x; }void g ();};void C::g() {x = f ();f (3);x = f (4, 5);x = 6;}int main () {C c;B b = c;A a = с;c.f ();c.f (7);x = f (‘8’, 9);return -1;}b)int x = 0;int f() { return x = 1; }class A {int x;public:A( int n = 2) { x = n; }int f() { return x = 3; }int f(int a, int b) { return x = a % b; }};16class B: public A {int x;public:int f(int a) { return x = a; }int f(int a, int b) { return x = a + b; }int g(A * a, B * b);};intB::g (A * pa, B * pb) {x = f ();x = f (5)x = f (6, 6);x = A::f (5);return -1;}int main () {B a;class C {B b;A a;public:C(): b(), a (b) { }};C c;x = a.f ();x = a.f (7);return a.g (& a, & a);}c)int x = 0;int f (int a, int b) { return x = a + b; }class A {int x;public:A(int n = 1) { x = n; }int f() { return ::x = x; }};class B {int x;public:B (int n = 2) { x = n; }};class C: public A, public B {int x;public:int f(int a) { return ::x = x; }void g ();};void C::g() {x = f ();f (3);x = f (4, 5);x = 6;}17int main () {C c;B b;A a;c.f();c.f(7);x = f(‘8’, 9);return -1;}d)int x = 0;int f() {return x = 1; }class A {int x;public:A( int n = 2) { x = n; }int f() { return x = 3; }int f(int a, int b) { return x = a % b; }};class B: public A {int x;public:int f(int a) { return x = a; }int f (int a, int b) { return x = a + b; }int g (A * a, B * b);};intB::g (A * pa, B * pb) {x = f();x = f(5);x = f(6, 6);x = A::f(5);return -1;}int main () {B a;x = a.f();x = a.f(7);class C {A a1;public:C(): a1(b) {}};C c;return a.g(& a, & a);}e)int x = 4;class A {int x;public:A(int n = 1);int f(int a = 0, int b = 0);};18class B: public A {public:int x;B(int n = 2);int f(int a);};class C: public B {int x;public:C(int n = 3);int f(int a, int b);int g(A * p);};int main () {A * p;B b;C c;A a = c;struct D {B b;D(): b(5) {}} d;p = & b;x = c.g(& c);x = c.f();x = c.f(x);x = c.f(x, 1);x = p -> f();x = p -> f(x);x = p -> f(x, 1);return 1;}f)int x = 4;class A {int x;public:A(int n = 3);int f(int a = 0, int b = 0);};class B: public A {int x;public:B(int n = 1);int f(int a = 0);};class C: public B {int x;public:C(int n = 2);int f(int a, int b);int g(A * p);};19int main () {A * p;B b;C c;class D {B b;A a;public:D(): a(b) {}} d;p = & b;x = c.g(& b);x = c.f();x = c.f(x);x = c.f(x, 1);x = p -> f();x = p -> f(x);x = p -> f(x, 1);return 2;}3.3.
Если есть ошибки в следующем фрагменте, то в чем они заключаются? Исправьте ошибки, ничего не удаляя, добавив в общей сложности не более 14 символов.class A {public:int * n;int m;};class B: public A {public:int * p;};class C: public A {public:int * c;};class D: public B, public C {public:int * e;};int main () {D fA, * f = new D;fA.m =0;return *((* f).e = & fA.m);}3.4. Если есть ошибки в следующем фрагменте, то в чем они заключаются? Исправьте ошибки, ничего не удаляя, добавив в общей сложности не более 12 символов.class S {public:int s;void sp(int si) { s = si; }};20class T: S {public:int t;void tp(int ti) { t = ti; s = ti; }};class U: T {public:int u;void up(int ui) { u = ui; t = ui; s = ui; }};void g() {U * pu = new U;T * pt = pu;S * ps = pu;}3.5.
Если есть ошибки в следующем фрагменте, то в чем они заключаются? Исправьте ошибки, ничего не удаляя, добавив в общей сложности не более 29 символов.class W {public:int * w;void wf (int * wp) { w = wp; }};class X: W {public:int * x;void xf (int * xp) { x = xp; w = xp; }};class Y: W {public:int * y;void yf (int * yp) { y = yp; w = yp; }};class Z: X, Y {public:int * z;void zf (int * zp) { z = zp; x = zp; y = zp; }};void h () {int hi;W * pw;X * px;Y * py;Z * pz;pz = new W;(*pz).w = & hi;pz -> xf ((*pz).X::w);}214.Виртуальные функции.
Абстрактные классы4.1.Описать условия включения механизма виртуальности для метода класса. Привести пример записи виртуальной функции и обращения к ней.4.2.Есть ли ошибки в приведенном фрагменте программы? Если есть, то объясните,в чем они заключаются. Ошибочные конструкции вычеркнуть из текста программы. Что будет выдано в стандартный канал вывода при работе программы?class X {public:virtual int g (double x) {h ();cout << "X::g" << endl;return 1;}void h () { t ();cout << "X::h" << endl;}virtual void t (){ cout << "X::t" << endl;}};class Z: public X {public:int g (double y) {h ();cout << "Z::g" << endl;return 3;}virtual void h () { t (1);cout << "Z::h" << endl; }virtual void t (int k){ cout << "Z::t" << endl; }};int main(){X a;Z b;p -> g(1.5);p -> h();p -> t(5);}4.3.X * p = &b;Есть ли ошибки в приведенном фрагменте программы? Если есть, то объясните,в чем они заключаются.
Ошибочные конструкции вычеркнуть из текста программы. Что будет выдано в стандартный канал вывода при работе программы?class T {public:virtual int f (intcout << "T::f"return 0;}void g () {f (1);cout << "T::g"}virtual void h ()g ();cout << "T::h"}};x) {<< endl;<< endl;{<< endl;22class S: public T {public:int f (double y){cout << "S::f" << endl;return 2;}virtual void g () {f (1);cout << "S::g" << endl;}virtual void h () {g();cout << "S::h" << endl;}};int main(){T t; S s; T *p = &s;p -> f (1.5);p -> g ();p -> h ();}4.4.Есть ли ошибки в приведенном фрагменте программы? Если есть, то объясните, в чем они заключаются.
Ошибочные конструкции вычеркнуть из текста программы. Что будет выдано в стандартный канал вывода при работе программы?class K {public:virtual int f (int x) {cout << "K::f" << endl;return 0;}void g () {f (1);cout << "K::g" << endl;}virtual void h () {g ();cout << "K::h" << endl;}};class P: public K {public:int f (double y) {cout << "P::f" << endl;return 2;}virtual void g () {f (1);cout << "P::g" << endl;}virtual void h () {g();cout << "P::h" << endl;}};23int main(){K k; P p; K *t = &p;t -> f (0.7);t -> g ();t -> h ();}4.5.Есть ли ошибки в приведенном фрагменте программы? Если есть, то объясните,в чем они заключаются.