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的指针数组指向每个派生类;
ex
Reader *obj[10];
int pos =0;
obj[pos++] = new fantasyReader();主要目标是组织图书列表,并将其归入适当的类别和适当的读者
并将它们写入到新的文本文件中。
例如。
-大卫-
Riddick
-约翰-
乌鸦
我的问题
我不确定operator<<和operator>>中应该包含什么
对于课本和课本阅读器
发布于 2011-05-29 20:29:47
应该在重载的<<和>>运算符中放入什么内容?
实际上,您可以将任何内容放入重载的<<和>>操作符中。只要有合适的机会出现,它们就只是简单的函数调用。
例如:
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;同样,对于>>提取操作符,我希望操作符从用户那里获取数据。对于ex:
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
}因此,底线是您可以将任何功能放入>> <<运算符和运算符中,但不要忘记最小惊讶的原则!
https://stackoverflow.com/questions/6167632
复制相似问题