Top.Mail.Ru
Ответы

Помогите решить задачку на С++

class Foo
{
public:
Foo(int j) { i=new int[j]; }
~Foo() { delete i; }
private:
int* i;
};

class Bar: Foo
{
public:
Bar(int j) { i=new char[j]; }
~Bar() { delete i; }
private:
char* i;
};

void main()
{
Foo* f=new Foo(100);
Foo* b=new Bar(200);
*f=*b;
delete f;
delete b;
}
Перечислите все проблемы, которые вы видите в данном коде

Дополнен

это тестиррвание в яндекс, main менять нельзя. я еще делал виртуальным диструктор, наследование public ннадоо скорее всего

По дате
По рейтингу
Аватар пользователя
Новичок
13лет

#include <iostream>
class Foo
{
public:
Foo(int j) { i = new int[j]; }
~Foo() { delete[] i; } //требуется удалять массив
protected:
Foo() { }; // требуется конструктор по умолчанию, спрятанный от пользователя
private:
int * i;
};

class Bar: Foo
{
public:
Bar(int j) { i = new char[j]; }
~Bar() { delete[] i; } //требуется удалять массив
private:
char * i;
};

void main()
{
Foo * f = new Foo(100);
Bar * b = new Bar(200); // не совпадали типы
//*f = *b; // смесь бульдога с носорогом (нельзя преобразовать к недоступному базовому классу)
b = NULL;
f = NULL;
}

Здесь наследование нужно, как собаке пятая нога.

Аватар пользователя
Мудрец
13лет

Как минимум, Foo* b=new Bar(200);