#include <iostream.h>
#include <string.h>
// Класс "Товар"
class Good
{
char tov[20];
public:
void set_tov(const char*t){strcpy(tov,t);}
const char*get_tov() const {return tov;}
Good(const char *t = "empty"){strcpy(tov,t);cout<<"Rabota constructora Good"<<endl;}
~Good(){cout<<"rabota destructora Good"<<endl;}
};
// Класс "Товар с ценой"
class GoodWithPrice: virtual public Good
{
protected:
int cena;
public:
void set_cena(int c){cena=c;}
const int get_cena() const {return cena;}
GoodWithPrice(const char *t = "empty", int c = 0)
: Good (t), cena (c)
{cout<<"Rabota constructora GoodWithPrice"<<endl;}
~GoodWithPrice(){cout<<"rabota destructora GoodWithPrice"<<endl;}
};
// Класс "Товар с количеством"
class GoodWithQuantity: virtual public Good
{
protected:
int kol;
public:
void set_kol(int k){kol=k;}
const int get_kol() const {return kol;}
GoodWithQuantity(const char *t = "empty", int k = 0)
: Good (t), kol (k)
{cout<<"Rabota constructora GoodWithQuantity"<<endl;}
~GoodWithQuantity(){cout<<"rabota destructora GoodWithQuantity"<<endl;}
};
// Класс "Товар с ценой и количеством"
class GoodWithPriceAndQuantity: public GoodWithPrice, public GoodWithQuantity
{
char firm[20];
public:
void set_firm(const char*f){strcpy(firm,f);}
const char*get_firm() const {return firm;}
const int get_sum() const {return kol*cena;}
GoodWithPriceAndQuantity(const char *t = "empty", int price = 0, int k = 0, const char *f = "empty")
:GoodWithPrice (t, price), GoodWithQuantity (t, k)
{strcpy(firm,f);cout<<"Rabota constructora GoodWithPriceAndQuantity"<<endl;}
~GoodWithPriceAndQuantity(){cout<<"rabota destructora GoodWithPriceAndQuantity"<<endl;}
};
Посчитать сумму всех продуктов с помощью перегрузки ( С++)
#include <string.h>
class a{
char tov[20];
public:
void set_tov(char*t){strcpy(tov,t);}
char*get_tov(){return tov;}
a(char *t = "empty"){strcpy(tov,t);cout<<"Rabota constructora A"<<endl;}
~a(){cout<<"rabota deconstructora A"<<endl;}
};
class b: virtual public a{
protected:
int cena;
public:
void set_cena(int c){cena=c;}
int get_cena(){return cena;}
b(int c = 0){cena=c;cout<<"Rabota constructora B"<<endl;}
~b(){cout<<"rabota deconstructora B"<<endl;}
};
class c: virtual public a{
protected:
int kol;
public:
void set_kol(int k){kol=k;}
int get_kol(){return kol;}
c(int k = 0){kol=k;cout<<"Rabota constructora C"<<endl;}
~c(){cout<<"rabota deconstructora C"<<endl;}
};
class d: public b, public c{
char firm[20];
int sum;
public:
void set_firm(char*f){strcpy(firm,f);}
char*get_firm(){return firm;}
int get_sum(){return sum;}
d(char *f = "empty"){strcpy(firm,f);cout<<"Rabota constructora D"<<endl;}
~d(){cout<<"rabota deconstructora D"<<endl;}
d operator*(d obj){ d t1; t1.sum = kol * obj.cena; return t1;}
d operator+(d obj){ d t2; t2.sum = cena + obj.cena; return t2;}
};
void enter(d*obj, int*j)
{
char tov[20],firm[20];
int cena,kol;
cout<<"\nVVEDITE KOLVO FIRM: ";
cin>>*j;
for (int i=0;i<*j;i++)
{
cout<<"VVEDITE NAZVANIE TOVARA: ";
cin>>tov;
obj.set_tov(tov);
cout<<"VVEDITE CENY TOVARA: ";
cin>>cena;
obj.set_cena(cena);
cout<<"VVEDITE KOLVO TOVARA: ";
cin>>kol;
obj.set_kol(kol);
cout<<"VVEDITE NAZVANIE FIRMI: ";
cin>>firm;
obj.set_firm(firm);
}
}
void print(d*obj,int j)
{
for(int i=0;i<j;i++)
{
cout<<"NAZVANIE TOVARA: "<<obj.get_tov( )<<endl;
cout<<"CENA: "<<obj.get_cena( )<<endl;
cout<<"KOLVO: "<<obj.get_kol()<<endl;
cout<<"NAZVANIE FIRMI: "<<obj.get_firm( )<<endl;
}
}
void main(){
int i,kol,j,sw;
d obj [8],obj_sum;
while (1){
cout <<"-=MENU=-\n1-ENTER\n2-VIEW\n3-SUM\n4-EXIT\n ";
cout<<"VIBERITE PUNKT: ";
cin>>sw;
switch(sw){
case 1: enter(obj,&j);break;
case 2: print(obj,j);break;
case 3: for(i=0;i<kol;i++) obj_sum=obj_sum+obj*obj;cout<<obj_sum.get_sum()<<endl;break;
case 4: return;
default: cout<< "FATAL ERROR!!!\n";break;}
}
}[/HTML]
Неправильно считает сумму. Искал ошибку - не могу найтию Помогите пожалуйста найти.
up+++
61201, что должны делать перегруженные операторы '*' и '+' ?
Цитата: 61201
Неправильно считает сумму. Искал ошибку - не могу найтию Помогите пожалуйста найти.
1. Используй тег code, а не HTML.
2. Общепринятое название - деструктор, а не деконструктор.
3. Почему бы не написать более читабельный код? Что значит "a", "b", "c", "d" ?
Вот подправленный код твоих классов:
Код:
Действительно, непонятно, что должен делать оператор *.
А также оператор +. Он что, должен "складывать" товары? И какое название, фирма, цена и количество должны быть у этого "сложенного" товара? Сложить можно только сумму, остальное - никак. Операторы тут ни к чему.
Так что подсчет суммы будет идти примерно так.
Код:
GoodWithPriceAndQuantity comp_apple ("Apple", 20, 100, "Macintosh");
GoodWithPriceAndQuantity comp_i468 ("80486", 15, 50, "IBM");
GoodWithPriceAndQuantity comp_i386 ("80386", 8, 20, "IBM");
int summary = comp_apple.get_sum() + comp_i468.get_sum() + comp_i368.get_sum(); // Вот общая сумма
GoodWithPriceAndQuantity comp_i468 ("80486", 15, 50, "IBM");
GoodWithPriceAndQuantity comp_i386 ("80386", 8, 20, "IBM");
int summary = comp_apple.get_sum() + comp_i468.get_sum() + comp_i368.get_sum(); // Вот общая сумма
Должно получиться 2910