首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++重载operator<<和operator>>

c++重载operator<<和operator>>
EN

Stack Overflow用户
提问于 2011-05-29 20:06:14
回答 1查看 451关注 0票数 0
代码语言:javascript
复制
class Book
{ 
     string title;
     int category;
 public:
    Book(const string& abook, int num);
    string getTitle() const;
    int getCategory() const;
    friend ostream& operator<<(ostream& os, const Book& abook);
    friend istream& operator>>(istream& is, Book& abook);
 };

class Reader  // base class
{
private:
    string reader_name;
    vector<Book> bookLists;
public:
   string showname() const;
   void add(const Book& abook);    // organize book list
   friend ostream& operator<<(ostream& os, const Reader& read_name);
   friend istream& operator>>(istream& is, Reader& read_name);
};

 class fantasyReader : public Reader {  };
 class horrorReader : public Reader { };
 class scienceReader : public Reader { } ;
class mysteryReader : public Reader { };

我有两个给定的文本文件。

1) Reader.txt <-包含读者的名称和类别

对于ex。

David <-读者的名字

0 <- david是Fantasy reader

2) Book.txt <-包含图书的标题和类别

对于ex

Riddick <-书名

0 <-书的类别是幻想

在main函数中,指向Reader的obj的指针数组指向每个派生类;

代码语言:javascript
复制
 ex

Reader *obj[10];
int pos =0;
obj[pos++] = new fantasyReader();

主要目标是组织图书列表,并将其归入适当的类别和适当的读者

并将它们写入到新的文本文件中。

例如。

-大卫-

Riddick

-约翰-

乌鸦

我的问题

我不确定operator<<和operator>>中应该包含什么

对于课本和课本阅读器

EN

回答 1

Stack Overflow用户

发布于 2011-05-29 20:29:47

应该在重载的<<和>>运算符中放入什么内容?

实际上,您可以将任何内容放入重载的<<>>操作符中。只要有合适的机会出现,它们就只是简单的函数调用。

例如:

代码语言:javascript
复制
Book obj;
cout<< obj;  //Calls your overloaded << operator

作为一般原则,在重载运算符时,您应该遵循最不令人惊讶的原则,这意味着您的代码应该执行类似于运算符对内部数据类型所做的事情。在上面的示例中,我希望<<操作符显示Book类的内容,在这种情况下,我将重载它,如下所示:

代码语言:javascript
复制
// Display title and category 
ostream& operator<<(ostream& os, const Book& abook);
{
    os << abook.title << "\n";
    os << abook.category<< "\n";

    return os; // must return ostream object
}

我需要返回一个流对象,因为它允许chaining ex:

代码语言:javascript
复制
Book obj1,obj2,obj3;
cout<<obj1<<obj2<<obj3;

同样,对于>>提取操作符,我希望操作符从用户那里获取数据。对于ex:

代码语言:javascript
复制
Book obj;
cin>>obj; //Calls your overloaded >> operator

我重载>>操作符,如下所示:

代码语言:javascript
复制
//Get the Book Title & Category from User
istream& operator>>(istream& is, Book& abook)
{
    cout << "Enter Book Title: ";
    is >> abook.title ;
    cout << "Enter Book Category: ";
    is >> abook.category;

    return is;  //Must return stream object
}

因此,底线是您可以将任何功能放入>> <<运算符和运算符中,但不要忘记最小惊讶的原则!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6167632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档