Решение задачи ООП (С++)? Задача:
Напишите программу создания базы данных некоторого магазина ткани который еще торгует и пряжей. Создайте класс, в котором хранится названия и цена. От этого класса наследуется еще 2 класса: первый содержит информацию о производителе ткани,а второй содержит информацию о составе пряжи и метрах в мотке. В каждом из трех классов должен быть метод getdata через который можно получить данные от пользователя с клавиатуры и метод позволяющий выполнить вывод данных на экран.
Мой код. Как в класс-наследник для функции getdata() получить данные из функции getdata класса-родителя?class shop
{
protected:
int n1, n2, *price1, *price2;
char **cloth, **yarn;
public:
~shop()
{
delete [] price1;
delete [] price2;
for (int i=0; i>n1;
price1=new int[n1];
cloth=new char*[n1];
for (int i=0; i>cloth[i]>>price1[i];
cout>n2;
price2=new int[n2];
yarn=new char*[n2];
for (int i=0; i>yarn[i]>>price2[i];
}
void outdata()
{
cout>fabricator[i];
}
}
void outdata()
{
cout>consist[i]>>length[i];
}
}
void outdata()
{
cout<<"The consist ant the length of yarn:\n";
for (int i=0; i cout< }
};
void main()
{
shop ob;
ob.getdata();
shop_cloth ob1;
shop_yarn ob2;
ob1.getdata();
ob2.getdata();
cout< system("pause");
}

21 Авг 2019 в 07:06
203 +1
0
Ответы
1

Ошибка в вашем коде заключается в том, что вы не вызываете getdata() из класса-родителя в класс-наследник. Для этого необходимо явно вызывать метод getdata() из класса-родителя в конструкторе класса-наследника.

Вот пример исправленного кода:

class shop
{
protected:
int n1, n2, *price1, *price2;
char** cloth;
char** yarn;
public:
~shop()
{
delete[] price1;
delete[] price2;
for (int i = 0; i < n1; i++)
delete[] cloth[i];
for (int i = 0; i < n2; i++)
delete[] yarn[i];
}
void getdata()
{
// your code to get data from the user
}
void outdata()
{
// your code to output data
}
};
class shop_cloth : public shop
{
char** fabricator;
public:
~shop_cloth()
{
for (int i = 0; i < n1; i++)
delete[] fabricator[i];
}
void getdata()
{
shop::getdata(); // call base class getdata() method
fabricator = new char*[n1];
for (int i = 0; i < n1; i++)
fabricator[i] = new char[20];
// your code to get fabricator data from the user
}
void outdata()
{
// your code to output fabricator data
}
};
class shop_yarn : public shop
{
char** consist;
int* length;
public:
~shop_yarn()
{
delete[] length;
for (int i = 0; i < n2; i++)
delete[] consist[i];
}
void getdata()
{
shop::getdata(); // call base class getdata() method
consist = new char*[n2];
for (int i = 0; i < n2; i++)
consist[i] = new char[20];
length = new int[n2];
// your code to get consist and length data from the user
}
void outdata()
{
// your code to output consist and length data
}
};
int main()
{
shop ob;
ob.getdata();
shop_cloth ob1;
ob1.getdata();
shop_yarn ob2;
ob2.getdata();
// your code to output data from all objects
return 0;
}

В этом исправленном коде метод getdata() из класса-родителя вызывается в каждом из классов-наследников, чтобы получить данные из базового класса.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир