#include <iostream>
#include <string>
struct Printable abstract
{
friend std::ostream& operator<<(std::ostream& cout, const Printable& obj)
{
obj.print(cout);
return cout;
}
virtual void print(std::ostream& cout) const = 0;
};
struct VirtualBase abstract : public Printable
{
//stuff
};
struct Named abstract : public Printable
{
std::string name;
void print(std::ostream& cout) const
{
cout << "Name: " << name;
}
};
struct DerivedA : public VirtualBase
{
void print(std::ostream& cout) const
{
cout << "DerivedA";
}
};
struct DerivedB : public VirtualBase, public Named
{
void print(std::ostream& cout) const
{
cout << "DerivedB";
dynamic_cast<const Named*>(this)->print(cout);
//Is there a better way to call Named::print?
}
};
的多层由于DerivedB结构设置COUT支持继承VirtualBase和命名,这两个的继承打印,我不能COUT使用DerivedB。在继承层次的多个层次上进行Printable支持的最佳方式是什么?另外,在派生类的print中调用Named :: print最简单的方法是什么?与继承
什么是在你的结构声明中的'abstract'?这是无效的C++。 – 2012-03-05 23:21:48
@DavidBrown:除非他把它当作宏。 – Linuxios 2012-03-05 23:24:14
@Linux啊是的。如果是这样的话,您可能希望将它包含在您的代码示例中,并使其与宏的标准一致,以避免混淆user173342。 – 2012-03-05 23:29:51