未分类题
某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文,那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求,得到如图5-1所示的类图。

图5-1 Visitor模式类图
【C++代码】
class LibraryVisitor;
class LibraryItemInterface{
public:
(1);
};
class Article:public LibraryItemInterface{
private:
string?m_title;//论文名
string?m_author;//论文作者
int m_start_page;
int m_end_page;
public:
Article(string p_author,string p_title,int p_start_page,int p_end_page);
int getNumberOfPages( );
void accept(Library Visitor*visitor);
};
class Book:public LibraryItemInterface{
private:
string?m_title;//书名
string?m_author;//作者
int m_pages;//页数
public:
Book(string p_author,string p_title,int p_pages);
int getNumberOfPages( );
void accept(LibraryVisitor*visitor);
};
class LibraryVisitor{
public:
(2);
(3);
virtual void printSum( )=0;
};
class LibrarySumPrintVisitor:public LibraryVisitor{//打印总页数
private:
int sum;
public:
LibrarySumPrintVisitor( );
void visit(Book*p_book);
void visit(Article*p_article);
void printSum( );
};
//visitor.cpp
int Article::getNumberOfPages( ){
retum m_end_page-m_start_page;
}
void Article::accept(LibraryVisitor*visitor){(4);}
Book::Book(string p_author,string p_title,int p_pages){
m_title=p_title;
m_author=p_author;
m_pages=p_pages;
}
int Book::getNumberOfPages( ){return m_pages;}
void Book::accept(LibraryVisitor*visitor){(5);}
//其余代码省略
【参考答案】
(1)virtual void accept(LibraryVisitor*visitor)=0
(2)virt......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)