gpt4 book ai didi

c++ - C++重载运算符<<和运算符>>

转载 作者:行者123 更新时间:2023-12-03 08:53:37 25 4
gpt4 key购买 nike

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 <-包含读者的姓名和类别
对于前。
大卫<-读者的名字
0 <-大卫是Fantasy读者

2)Book.txt <----包含书名和类别

对于前
里迪克<-书名
0 <-书的类别是幻想

在主函数中,指向Reader的obj的指针数组指向每个派生类。
 ex

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

主要目标是组织书籍 list 并放入适当的类别和适当的读者中,并将它们写入新的文本文件中。
例如
-大卫-
里迪克

-约翰-
乌鸦

我的问题
我不确定operator <<和operator >>应该包含什么
类书籍和阅读器

最佳答案

您应该在重载的<<和>>运算符中放入什么?
好吧,您实际上可以将任何内容放入重载的<<>>运算符中。只要有适当的机会,它们将只是简单的函数调用。
例如:

Book obj;
cout<< obj; //Calls your overloaded << operator

作为重载运算符时的一般原则,您应遵循 最小惊讶原则,这意味着您的代码应执行与运算符对固有数据类型相似的操作。在上面的示例中,我希望 <<运算符显示 Book类的内容,在这种情况下,我将按如下方式重载它:
// 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:
Book obj1,obj2,obj3;
cout<<obj1<<obj2<<obj3;

同样,对于 >>提取运算符,我希望该运算符可以从用户那里获取数据。
例如:
Book obj;
cin>>obj; //Calls your overloaded >> operator

我将按以下方式重载 >>运算符:
//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
}

因此,最重要的是您可以在>><<运算符中放置任何功能,但不要忘记“最少惊讶原则”!

关于c++ - C++重载运算符<<和运算符>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33770833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com