Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Леший Ученик (179), закрыт 11 лет назад
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;
}
Перечислите все проблемы, которые вы видите в данном коде
Дополнен 11 лет назад
это тестиррвание в яндекс, main менять нельзя. я еще делал виртуальным диструктор, наследование public ннадоо скорее всего
Лучший ответ
Николай Веселуха Высший разум (362130) 11 лет назад
#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;
}

Здесь наследование нужно, как собаке пятая нога.
Остальные ответы
Manunich Мудрец (15857) 11 лет назад
Как минимум, Foo* b=new Bar(200);
Похожие вопросы