gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:11 24 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 <- david 是 Fantasy 读者


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

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


在主函数中,Reader 对象的指针数组指向每个派生类;

 ex

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

主要目标是整理图书列表,将其放入适当的类别和适当的读者
,并将它们写入新的文本文件。
例如

-大卫-
里迪克

-约翰-
乌鸦



我的问题
我不确定 operator<< 和 operator>>
里面应该有什么对于 Book 类和 Reader 类

最佳答案

应该在重载的 << 和 >> 运算符中放入什么?
好吧,你实际上可以在重载的 << 中放入任何东西和 >>运算符(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例如:

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++ 重载运算符<<和运算符>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6167632/

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