• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operatory, łączna masa ładunków

Object Storage Arubacloud
0 głosów
154 wizyt
pytanie zadane 9 grudnia 2015 w C i C++ przez PoProstuTomasz Początkujący (470 p.)

Mam takie zadanko, nie mogę wpaść na pomysł jak zdefiniować tą funkcję double Waga() w klasie Pojazd. Może ktoś z was ma pomysł i mnie naprowadzi. (również w kwesti pozostałych metod)

Treść zadania:
 

Mój dotychczasowy (ubogi) kod:

 

#include <iostream>

using namespace std;

class Ladunek{

    double kg,dag;

public:
    Ladunek();
    Ladunek(Ladunek &);
    Ladunek & operator=(Ladunek &);
    double Waga();

};

class Pojazd{

/*const*/ unsigned int pojemnosc;
/*const*/  double nosnosc;
int stan;
int info[20];

public:
    Pojazd (/*const*/ unsigned int apojemnosc, /*const*/ double anosnosc, int stan=0);
    double Waga();
    Pojazd & operator--();
    bool operator+=(Ladunek &);
};

int main()
{
    cout << "Hello world!" << endl;

    return 0;
}

////////////////////////////////////////////////////////

Ladunek::Ladunek(Ladunek &ladunek)
{
    kg=ladunek.kg;
    dag=ladunek.dag;
}

double Ladunek::Waga()
{
    masa=dag>0 ? kg+1 : kg;
    return masa;
}

Pojazd::Pojazd (/*const*/ unsigned int apojemnosc, /*const*/ double anosnosc, int stan)
{
    pojemnosc=apojemnosc;
    nosnosc=anosnosc;
}

double Pojazd::Waga()
{
    double waga=0;
    for(int i=0;i<=stan;i++)
        waga+=Ladunek::Waga();
    return waga;

}

 

1 odpowiedź

0 głosów
odpowiedź 9 grudnia 2015 przez Dorion300 Szeryf (90,250 p.)
No to teraz tworzysz operator plusika który zwraca dwa dodane argumenty.

Jak i sam operator +=
komentarz 9 grudnia 2015 przez PoProstuTomasz Początkujący (470 p.)
Tylko jak mam go stworzyć. Funkcja Waga() w klasie Pojazd w tym moim kodzie jest błędna. Nie wiem jak tam zwrócić wagę, żebym mógł ją potem dodać. Wgl jak bez dziedziczenia wziąć wagę z klasy Ladunek. A nawet jabym dziedziczył metodę z Ładunek to będzie konflikt nazw funkcji..
komentarz 9 grudnia 2015 przez Dorion300 Szeryf (90,250 p.)

waga+=Ladunek::Waga();

?

Waga w klasie Ładunek nie jest metodą statyczną.

Musisz operować na Obiektach. 

komentarz 9 grudnia 2015 przez PoProstuTomasz Początkujący (470 p.)
Noo właśnie wiem, tu mam problem, jak dostać się do wagi ładunku ?
komentarz 9 grudnia 2015 przez Dorion300 Szeryf (90,250 p.)
Najpierw jest potrzebny sam "ładunek".

O ile dobrze czytam to info powinno być tablicą "ładunkiem" a nie intem.

Potem waga += info[i].Waga();
komentarz 10 grudnia 2015 przez PoProstuTomasz Początkujący (470 p.)

Właśnie.. tu przeoczyłem dzięki. 
Ale pisząc dalej napotałem kolejne problemy. Z racji, że dopiero się uczę prosiłbym o nakierowanie, jeśli to możliwe, w miarę prosto ku rozwiązaniu.
Otóż jak w metodzie operator-- sprawdzić stan pojazdu, który jest polem prywatnym a nie mam metody zwracającej go. Nie wiem czy mogę sobie zrobić funkcję pomocniczą skoro nie ma tego w treści zadania. Oraz jak zdefinować to w taki sposób aby pola pojemnosc i nosnosc były stale.

Tutaj moje "jakieśtam" próby:

#include <iostream>

using namespace std;

class Ladunek{

    double kg,dag;

public:
    Ladunek();
    Ladunek(Ladunek &);
    Ladunek & operator=(Ladunek &);
    double Waga();

};

class Pojazd{

/*const*/ unsigned int pojemnosc;
/*const*/  double nosnosc;
int stan;
Ladunek info[20];

public:
    Pojazd (/*const*/ unsigned int apojemnosc, /*const*/ double anosnosc, int stan=0);
    double Waga();
    Pojazd & operator--();
    bool operator+=(Ladunek &);
};

int main()
{
    cout << "Hello world!" << endl;

    return 0;
}

////////////////////////////////////////////////////////

Ladunek::Ladunek(Ladunek &ladunek)
{
    kg=ladunek.kg;
    dag=ladunek.dag;
}

double Ladunek::Waga()
{
    return dag>0 ? kg+1 : kg;
}

Pojazd::Pojazd (/*const*/ unsigned int apojemnosc, /*const*/ double anosnosc, int stan)
{
    pojemnosc=apojemnosc;
    nosnosc=anosnosc;
}

bool Pojazd::operator+=(Ladunek &lad1)
{
    if( (Waga()+lad1.Waga())<nosnosc && stan+1<pojemnosc )
    {
        Waga()+lad1.Waga();
        stan+1;
        return true;
    }
    return false;
}
double Pojazd::Waga()
{
    double waga=0;
    for(int i=0;i<=stan;i++)
        waga+= info[i].Waga();
    return waga;

}

Pojazd & operator--(Pojazd &poj)
{
    if(poj.stan==0) return -1;
    poj(pojemnosc,nosnosc,stan--);
    return info[stan].Waga(); //info[stan] a nie [stan-1] bo jedynka odjeta linijke wyzej

}

 

komentarz 20 grudnia 2015 przez novasss Nowicjusz (100 p.)
To jest moja wersja !!!nietestowana!!!


#include <iostream>
#include <conio.h>

using namespace std;

class TLadunek
{
	int kg,deg;
public:
	TLadunek();
	TLadunek(const TLadunek&a) :kg(a.kg), deg(a.deg){}
	TLadunek& operator=(const TLadunek&a){ kg = a.kg; deg = a.deg; return *this; }
	double Waga(){ double w = kg + (deg / 100); return w; }
};

class TPojazd
{
	const int pojemnosc;
	const double nosnosc;
	int stan;
	TLadunek info[20];
public:
	TPojazd(int poj, double nos) :pojemnosc(poj > 0 ? poj : 0), nosnosc(nos > 0 ? nos : 0){ stan = 0; }
	double Waga();
	double operator--();
	bool operator+=(TLadunek&);
};
double TPojazd::Waga()
{
	double w = 0;
	for (int i = 0; i < stan; i++)
		w += info[i].TLadunek::Waga();
	return w;
}
double TPojazd::operator--()
{
	if (stan == 0)
		return -1.0;
	else
	{
		stan--;
		return info[stan + 1].TLadunek::Waga();
	}
}
bool TPojazd::operator+=(TLadunek&a)
{
	if (stan == pojemnosc || (a.TLadunek::Waga() + TPojazd::Waga()) > nosnosc)
		return false;
	else
	{
		stan++;
		info[stan] = a;
		return true;
	}
}
int main()
{
	_getch();
	return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 632 wizyt
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 22 czerwca 2022 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
+1 głos
2 odpowiedzi 334 wizyt
pytanie zadane 14 czerwca 2021 w C# przez everstudybee Użytkownik (610 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...