Ik ben een project aan het maken voor een van mijn lessen en ik ben er vrij zeker van dat ik bijna klaar ben met het project. In principe moet ik kaartjes voor 2 personen invoeren en moet ik de maximum- en minimumprijs vinden. Ik moet de * en / operators overbelasten om dat probleem voor het project op te lossen. Ook is de friend
-verklaring een noodzaak voor dit project via de instructies van de leraar.
Nu, voor de kwestie. Ik probeer de juiste ticketvariabele (t1 of t2) in t3 op te slaan, zodat ik die terug kan sturen naar de main. Als ik “=” gebruik om t1 op t3 in te stellen, staat er “no vivid overloaded ‘='”. Het volgende is mijn code:
#include <iostream>
using namespace std;
class ticket
{
public:
ticket();
double input();
double output();
friend ticket operator *(const ticket &t1, const ticket &t2);
friend ticket operator /(const ticket &t1, const ticket &t2);
private:
void cost();
string name;
double miles, price;
int transfers;
};
int main()
{
ticket customer1, customer2, customer3;
//------------------------------------------------
cout << "*** Customer 1 ***" << endl;
customer1.input();
cout << "--- Entered, thank you ---" << endl;
cout << "*** Customer 2 ***" << endl;
customer2.input();
cout << "--- Enter, thank you ---" << endl;
//------------------------------------------------
//------------------------------------------------
cout << "Testing of the * operator: " << endl;
customer3 = customer1 * customer2;
cout << "*** Database printout: ***" << endl;
customer3.output();
cout << endl;
cout << "--- End of Database ---" << endl;
//------------------------------------------------
//------------------------------------------------
cout << "Testing of the / operator:" << endl;
customer3 = customer1 / customer2;
cout << "*** Database printout: ***" << endl;
customer3.output();
cout << endl;
cout << "--- End of Database ---" << endl;
//------------------------------------------------
return 0;
}
ticket operator *(const ticket &t1, const ticket &t2)
{
ticket t3;
if (t1.price > t2.price)
t3 = t1.price;
else
t3 = t2.price;
return t3;
}
ticket operator /(const ticket &t1, const ticket &t2)
{
ticket t3;
if (t1.price < t2.price)
t3 = t1.price;
else
t3 = t2.price;
return t3;
}
ticket::ticket()
{
}
double ticket::input()
{
cout << "Miles? ";
cin >> miles;
cout << endl << "Transers? ";
cin >> transfers;
cout << endl << "Name? ";
cin >> name;
cost();
cout << endl << "Price is: " << price << endl;
return miles;
}
double ticket::output()
{
cout << name << '\t' << miles << "mi \t " << transfers << " transfers \t" << price;
return miles;
}
void ticket::cost()
{
price = (.5 * miles) - (50 * transfers);
}
Antwoord 1, Autoriteit 100%
U definieert geen operator=
voor ticket
DAT EEN DUBBELE NAAULLEN ZIJN ALS HERDELING. Dientengevolge kunt u geen doubles toewijzen aan ticket
objecten.
Antwoord 2, Autoriteit 50%
Zo krijg ik dezelfde compileerfout. Ik heb een van mijn getter-functies gemarkeerd als const
terwijl ik de klassenlidvariabele nog steeds wil wijzigen. Zie het volgende eenvoudige voorbeeld:
class CPath {
private:
std::string m_extension;
public:
std::string GetExtension() const {
if (m_extension.length()==0) {
m_extension = "txt";
}
return m_extension;
}
}
In dit geval hebben we twee oplossingen:
1) laat de modifier const
in de functiedefinitie vallen;
2) markeer de eigenschap m_extension
als mutable
.
Antwoord 3
misschien wilt u een ledenfunctie
set_price(const& double price)
zodat u de foutcode zo kunt wijzigen, wat beter zou zijn
if (t1.price > t2.price)
t3.set_price(t1.price);
else
t3.set_price(t2.price);