Решение задачи ООП (С++)? Задача: Напишите программу создания базы данных некоторого магазина ткани который еще торгует и пряжей. Создайте класс, в котором хранится названия и цена. От этого класса наследуется еще 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"); }
Ошибка в вашем коде заключается в том, что вы не вызываете 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() из класса-родителя вызывается в каждом из классов-наследников, чтобы получить данные из базового класса.
Ошибка в вашем коде заключается в том, что вы не вызываете 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() из класса-родителя вызывается в каждом из классов-наследников, чтобы получить данные из базового класса.