Решение задачи ООП (С++)? Задача:
Напишите программу создания базы данных некоторого магазина ткани который еще торгует и пряжей. Создайте класс, в котором хранится названия и цена. От этого класса наследуется еще 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; i++)
delete [] cloth[i];
for (int i=0; i<n2; i++)
delete [] yarn[i];
}
void getdata()
{
cout<>n1;
price1=new int[n1];
cloth=new char*[n1];
for (int i=0; i<n1; i++)
cloth[i]=new char[20];
cout<<"Input name of cloth and price of it:\n";
for (int i=0; i>cloth[i]>>price1[i];
cout<>n2;
price2=new int[n2];
yarn=new char*[n2];
for (int i=0; i<n2; i++)
yarn[i]=new char[20];
cout<<"Input name of yarn and price of it:\n";
for (int i=0; i>yarn[i]>>price2[i];
}
void outdata()
{
cout<<"In stock shop has the following products at a following price:\n";
for (int i=0; i<n1; i++)
cout<<cloth[i]<<" "<<price1[i]<<endl;
for (int i=0; i<n2; i++)
cout<<yarn[i]<<" "<<price2[i]<<endl;
}
};
class shop_cloth:public shop
{
char **fabricator;
public:
~shop_cloth()
{
for (int i=0; i<n1; i++)
delete [] fabricator[i];
}
void getdata()
{
fabricator=new char*[n1];
for (int i=0; i<n1; i++)
fabricator[i]=new char[20];
cout<<"Input the fabricators of cloth:\n";
for (int i=0; i<n1; i++)
{
cout<<cloth[i]<>fabricator[i];
}
}
void outdata()
{
cout<<"The fabricators of cloth:\n";
for (int i=0; i<n1; i++)
cout<<cloth[i]<<" "<<fabricator[i];
}
};
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()
{
consist=new char*[n2];
for (int i=0; i<n2; i++)
consist[i]=new char[20];
length=new int[n2];
cout<<"Input the consist and the length of yarn:\n";
for (int i=0; i<n2; i++)
{
cout<<yarn[i]<>consist[i]>>length[i];
}
}
void outdata()
{
cout<<"The consist ant the length of yarn:\n";
for (int i=0; i<n1; i++)
cout<<yarn[i]<<" "<<consist[i]<<" "<<length[i];
}
};
void main()
{
shop ob;
ob.getdata();
shop_cloth ob1;
shop_yarn ob2;
ob1.getdata();
ob2.getdata();
cout<

21 Авг 2019 в 07:06
223 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир