Вы находитесь на странице: 1из 6

Билет 5

1.Что напечатает следующий код. Строки где есть ошибки заккоментируйте.


int a,b,
                        *p=&a,
                        &r=a;
                        float &c=a;
                        const float &d=a;
                        int &c;
                        a=-1;
                        cout<<a<<" "<<r<<" "<<*p<<endl;
                        b=--r;
                        *p=a;
                        cout<<a<<" "<<r<<" "<<*p<<endl;   
                        const int *const r1 = &a;
                        a++;
                        r1++;
                        c=b;
2. Уберите одно неверное определение функции и один оператор в приведенном коде.
Что он напечатает?
void f(int x, char *s="hello",int y){ cout<<0<<endl;}
void f(double x, const char *s){ cout<<x<<" "<<4<<endl;}
void f(char x, const char *s){ cout<<x<<" "<<5<<endl;}
void f(int x, const char *s="hello"){ cout<<1<<endl;}
void f(float x, char *s){ cout<<x<<" "<<2<<endl;}
void f(double x, char *s){ cout<<x<<" "<<3<<endl;}
void f(float x){ cout<<x<<" "<<6<<endl;}
void f(int x,double s){ cout<<x<<" "<<7<<endl;}
void f(double x,double s){ cout<<x<<" "<<8<<endl;}
int main()
{
                        int a=1;
                        char h[0];
                        float d=.9;
                        f(1.5,"a");
                        f(1.5,h);
                        f(a);
                        f(d);
                        f('0');
                        f('0',"y");
                        f(1.,1.);
                        f(1,1);
                        f(1.,1);
                        f(1,0);
3. (Волкова 1.11). Что напечатает следующая программа?
class I {
 int i;
public:
 I() : i(6) { cout << "owl" << endl; }
 I(int a) : i(a) { cout << "sheep " << i << endl; }
 I(const I & other) : i(other.i) { cout << "horse " << i << endl; }
 ~I() { cout << "wolf" << endl; }
 int Get() { return i; }
 void operator*=(const I & op) { i*=op.i; }
};
void f(I x, I & y) { x *= 1; y *= x;}
int main() {
 I i1; I i2(3); i1 *= 7;
 f(i1, i2);
 cout << i1.Get() << ' ' << i2.Get()<< endl; return 0;}
 4.(3.2) Если есть ошибки в реализации методов заданных классов и функции main (), исправьте их,
используя операцию разрешения области видимости «::». Какие конструкторы и деструкторы и в
каком порядке будут вызываться при работе данной программы? int x = 0;
int x = 0;
 int f() { return x = 1; }
class X { int x;
public: X( int n = 2) { x = n; }
 int f() { return x = 3; }
int f(int a, int b) { return x = a % b; } };
 class Y: public X { int x;
public: int f(int a) { return x = a; }
int f(int a, int b) { return x = a + b; }
int g(X * a, Y * b); };
int Y::g (X * pa, Y * pb) { x =f ();x = f (5) ;x = f (6, 6);x = X::f (5); return -1; }
 int main () {
Y a;
 class Z { Y b; X a; public: Z(): b(), a (b) { } };
 Z c;
x = a.f ();
 x = a.f (7);
 return a.g (& a, & a); }
5.(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);      }                    
6. (9.16). Описать функцию, которая удаляет каждый третий элемент заданного контейнера-вектора
vector , а затем распечатывает его элементы в обратном порядке.

Решение билета:

№1: int a,b,


                        *p=&a,
                        &r=a;
                        float &c=a; // недопустимая инициализация ссылки типа 'float' из выражения типа'int '
                        const float &d=a;
                        int &c;
                        a=-1;
                        cout<<a<<" "<<r<<" "<<*p<<endl;
                        b=--r;
                        *p=a;
                        cout<<a<<" "<<r<<" "<<*p<<endl;   
                        const int *const r1 = &a;
                        a++;
                        r1++;
                        c=b;
Решение №2:

// void f(int x, char *s="hello",int y){ cout«0«endl;}

void f(int x, const char *s="hello"){ cout«1«endl;}

void f(float x, char *s){ cout«x«" "«2«endl;}

void f(double x, char *s){ cout«x«" "«3«endl;}

void f(double x, const char *s){ cout«x«" "«4«endl;}

void f(char x, const char *s){ cout«x«" "«5«endl;}


void f(float x){ cout«x«" "«6«endl;}

void f(int x,double s){ cout«x«" "«7«endl;}

void f(double x,double s){ cout«x«" "«8«endl;}

int main(){

int a=1;

char h[0];

float d=.1;

f(a);

f(d);

f('0');

f('0',"y");

f(1.5,"a");

f(1.5,h);

f(1.,1.);

f(1,1);

f(1.,1);

// f(1,0);

Вывод программы:

0.1 6

05

1.5 4

1.5 3

18

17
18
Решение №4: Будут вызваны следующие конструкторы и деструкторы:A(), B(), A(), B(), A(constA &),
C(), ~C(), ~A(), ~B(), ~A(), ~B(), ~A()

Исправленный код: int x = 0;

int f() { return x = 1; }

class X { int x;

public: X( int n = 2) { x = n; }

int f() { return x = 3; }

int f(int a, int b) { return x = a % b; } };

class Y: public X { int x;

public: int f(int a) { return x = a; }

int f(int a, int b) { return x = a + b; }

int g(X * a, Y * b); };

int Y::g (X * pa, Y * pb) { x =f ();x = f (5) ;x = f (6, 6);x = X::f (5); return -1; }

int main () {

Y a;

class Z { Y b; X a; public: Z(): b(), a (b) { } };

Z c;

x = A::f ();

x = B:: f (5);

x = B:: f (6, 6);

x = B::f (5);

x = a.A::f ();

x = a.B:: f (7);
return a.B::g (& a, & a);

Решение №5: Во всех описаниях производных классов вставить указание виртуального наследования
Исправленный код:

 class A { public: int * n; int m; };

class B: virtual public A { public: int * p; };


class C: virtual public A { public: int * c; };

class D: virtual public B, public C { public: int * e; };


int main () { D fA, * f = new D; fA.m =0; return *((* f).e = & fA.m); }

Решение №6:
void f (vector <char> & v)
{ vector<char>::iterator p = v.begin ();
while (p != v.end ())
{ p ++;
if (p != v.end ())
v.erase (p);
}
vector<char>::const_reverse_iterator rp = v.rbegin ();
while (rp != v.rend ())
{ cout << * rp << ‘ ‘;
rp ++;
}
cout << endl;
}