Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Посчитать сумму всех продуктов с помощью перегрузки ( С++)

14K
16 декабря 2007 года
61201
31 / / 03.05.2007
[HTML]#include <iostream.h>
#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]
Неправильно считает сумму. Искал ошибку - не могу найтию Помогите пожалуйста найти.
14K
19 декабря 2007 года
61201
31 / / 03.05.2007
up+++
16K
19 декабря 2007 года
HolyDel
11 / / 03.03.2006
61201, что должны делать перегруженные операторы '*' и '+' ?
350
19 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: 61201
Неправильно считает сумму. Искал ошибку - не могу найтию Помогите пожалуйста найти.


1. Используй тег code, а не HTML.
2. Общепринятое название - деструктор, а не деконструктор.
3. Почему бы не написать более читабельный код? Что значит "a", "b", "c", "d" ?
Вот подправленный код твоих классов:

Код:
#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;}
};

Действительно, непонятно, что должен делать оператор *.
А также оператор +. Он что, должен "складывать" товары? И какое название, фирма, цена и количество должны быть у этого "сложенного" товара? Сложить можно только сумму, остальное - никак. Операторы тут ни к чему.
Так что подсчет суммы будет идти примерно так.
 
Код:
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(); // Вот общая сумма

Должно получиться 2910
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог