Как бы я справился с перегрузкой «<<»? - PullRequest
0 голосов
/ 07 апреля 2020

Мой профессор сказал, что перегрузка оператора << здесь необязательна, но я хотел знать, как я могу это сделать, поскольку я мог только понять это без использования перегрузки. </p>

Это функция в моем коде:

void listProducts()
{
    //list all the available products.
    cout << "Available products:\n";
    for(int i=0; i<numProducts; i++)
        cout << products[i]->getCode() << ": " << products[i]->getName() << " @ "
             << products[i]->getPrice() << "/pound.\n";
}

И это продукт. cpp Файл:

Product :: Product(int code, string name, double price) {
this->code = code;
this->name = name;
this->price = price;
}

int Product:: getCode(){
return code;
}

string Product :: getName(){
return name;
}

double Product :: getPrice(){
return price;
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вы можете сделать что-то вроде

std::ostream & operator<<(std::ostream &out,const classname &outval)
{
    //output operation like out<<outval.code<<":"<<outval.name<<"@"<<outval.price;
    return out;
}

и

friend std::ostream & operator<<(std::ostream &out,const classname &outval);

в своем классе, чтобы получить доступ к закрытым членам.

0 голосов
/ 07 апреля 2020

Если вы поняли решение вашего предыдущего вопроса это , то понять приведенный ниже код очень легко. Единственная разница заключается в использовании функции друга, о которой вы можете прочитать gfg link .

. Для вашего лучшего понимания ниже приведен точно такой же пример,

#include <iostream>
using namespace std;

class Product
{
private:
    int code; string name; double price;
public:
    Product(int, string, double);
    friend ostream & operator << (ostream &out, const Product &p);

};

Product :: Product(int code, string name, double price) {
    this->code = code;
    this->name = name;
    this->price = price;
}

ostream & operator << (ostream &out, const Product &p)
{
    out<< p.code << ": " << p.name << " @ "
             << p.price << "/pound.\n";
    return out;
}


int main()
{
   Product book1(1256,"Into to programming", 256.50);
   Product book2(1257,"Into to c++", 230.50);
   cout<<book1<<endl<<book2;
   return 0;
}
...