===========以下代码要定制的行为很简单,使用参数明显比多态简洁多了===============
#include
#include
using namespace std;
struct Printer
{
virtual ~Printer(){}
virtual void printPrefix() = 0;
virtual void print(const std::string& msg) = 0;
virtual void printPostfix() = 0;
};
void print(Printer& pt, const std::string& msg)
{
pt.printPrefix();
pt.print(msg);
pt.printPostfix();
}
struct StarPrinter
: public Printer
{
public:
virtual void printPrefix()
{
cout << "****************" << endl;
}
virtual void print(const std::string& msg)
{
cout << msg << endl;
}
virtual void printPostfix()
{
printPrefix();
}
};
struct AddPrinter
: public Printer
{
public:
virtual void printPrefix()
{
cout << "++++++++++++++++" << endl;
}
virtual void print(const std::string& msg)
{
cout << msg << endl;
}
virtual void printPostfix()
{
printPrefix();
}
};
void print(const std::string& msg, bool starFlag)
{
cout << ((starFlag) ? "******************" : "++++++++++++++++++") << endl;
cout << msg << endl;
cout << ((starFlag) ? "******************" : "++++++++++++++++++") << endl;
}
int main()
{
print(StarPrinter(), "Hello, World"); // 多态
print(AddPrinter(), "Hello, World");
print("Hello, World", true);
print("Hello, World", false);
return 0;
}