解决类里面包含容器的遍历,采用方法是函数的封装。
例:
查询书名的作者是谁;
作者类中包括书的容器;
在遍历每一个作者时候,调用遍历作者拥有书的容器。
此时把作者对象里容器遍历进行了封装。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Book
{
string m_strBookNO; //书号
string m_strBookName; //书名
string m_strPublic; //出版社
public:
Book(string strNO, string strName, string strPublic) :m_strBookNO(strNO),
m_strBookName(strName), m_strPublic(strPublic)
{}
string GetBookNO() { return m_strBookNO; }
string GetBookName() { return m_strBookName; }
void display_Book()
{
cout << "书号 : " << m_strBookNO << endl;
cout << "书名 : " << m_strBookName << endl;
cout << "出版社 : " <<m_strPublic << endl;
}
};
class Writer
{
string m_strNO; //作者编号
string m_strName; //作者姓名
vector<Book> m_vecBook;//所拥有书的向量集合
typedef vector<Book>::iterator iterator;
public:
Writer(string strNO, string strName) :m_strNO(strNO), m_strName(strName) {}
void AddBook(Book& book) { //向该作者添加所著书籍
m_vecBook.push_back(book);
}
string GetNO() { return m_strNO; }
string GetName() { return m_strName; }
vector<Book> GetVecBook() { return m_vecBook; }
void display_Writer()
{
cout << "作者编号 : " << m_strNO << endl;
cout << "作者姓名 : " << m_strName << endl;
}
bool Find_writer(string strName)
{
for (iterator book = m_vecBook.begin();
book != m_vecBook.end();++book)
{
Book& b = *book;
if (b.GetBookName() == strName)
{
b.display_Book();
return true;
break;
}
}
return false;
}
};
class WriterCollect
{
vector<Writer> m_vecWriter;
typedef vector<Writer>::iterator iterator;
public:
void AddWriter(Writer& writer) {//添加新的作者
m_vecWriter.push_back(writer);
}
void Find(string strName) {
for (iterator i = m_vecWriter.begin();i != m_vecWriter.end();++i)
{
Writer& s = *i;
if (s.Find_writer(strName))
s.display_Writer();
}
}
};
void main()
{
Writer w1("1001", "zhangsan");//产生作者对象w1
Book b1("b001", "aaa", "public");//产生两本书对象
Book b2("b002", "bbb", "public");
w1.AddBook(b1); //把该两本书加入作者对象w1
w1.AddBook(b2);
Writer w2("1002", "lisi");//产生作者对象w2
Book b3("b003", "ccc", "public");//产生一本书对象
w2.AddBook(b3); //把此书加入作者对象w2
WriterCollect collect;//产生作者集合类对象collect
collect.AddWriter(w1);//向collect对象中加入作者对象w1
collect.AddWriter(w2);//向collect对象中加入作者对象w2
collect.Find("ccc");
collect.Find("bbb");
system("pause");
}