Ik heb hieronder een code die een aantal namen en leeftijden nodig heeft en er wat dingen mee kan doen. Uiteindelijk zal hij ze uitprinten. Ik moet mijn functie print()
wijzigen met een algemene operator<<
. Ik zag op een ander forumdat <<operator
heeft twee parameters nodig, maar als ik het probeer, krijg ik een “te veel parameters voor << bedieningsfout. Is er iets dat ik verkeerd doe? Ik ben nieuwer in C++ en ik begrijp echt niet dat de operator overbelast is.
#include <iostream>;
#include <string>;
#include <vector>;
#include <string.h>;
#include <fstream>;
#include <algorithm>;
using namespace::std;
class Name_Pairs{
vector<string> names;
vector<double> ages;
public:
void read_Names(/*string file*/){
ifstream stream;
string name;
//Open new file
stream.open("names.txt");
//Read file
while(getline(stream, name)){
//Push
names.push_back(name);
}
//Close
stream.close();
}
void read_Ages(){
double age;
//Prompt user for each age
for(int x = 0; x < names.size(); x++)
{
cout << "How old is " + names[x] + "? ";
cin >> age;
cout<<endl;
//Push
ages.push_back(age);
}
}
bool sortNames(){
int size = names.size();
string tName;
//Somethine went wrong
if(size < 1) return false;
//Temp
vector<string> temp = names;
vector<double> tempA = ages;
//Sort Names
sort(names.begin(), names.end());
//High on performance, but ok for small amounts of data
for (int x = 0; x < size; x++){
tName = names[x];
for (int y = 0; y < size; y++){
//If the names are the same, then swap
if (temp[y] == names[x]){
ages[x] = tempA[y];
}
}
}
}
void print(){
for(int x = 0; x < names.size(); x++){
cout << names[x] << " " << ages[x] << endl;
}
}
ostream& operator<<(ostream& out, int x){
return out << names[x] << " " << ages[x] <<endl;
}
};
Antwoord 1, autoriteit 100%
U overbelast de operator <<
als lidfunctie, daarom is de eerste parameter impliciet het aanroepende object.
Je moet het ofwel overbelasten als friend
-functie of als een gratis functie. Bijvoorbeeld:
overbelasting als friend
functie.
friend ostream& operator<<(ostream& out, int x){
out << names[x] << " " << ages[x] <<endl;
return out;
}
De canonieke manier is echter om het te overbelasten als free
-functie. Je kunt zeer goede informatie vinden in dit bericht: C++ operator overbelasting
Antwoord 2, autoriteit 16%
verklaar de overbelastingsfunctie van de operator als vriend.
friend ostream& operator<<(ostream& out, int x)
{
out << names[x] << " " << ages[x] <<endl;
return out;
}