我经常面对这个问题.假设我有这些课程:
class B
{
public:
virtual std::string className(){return "B";}
};
class A
{
public:
A()
: _B(new B)
{}
virtual std::string className(){return "A";}
virtual void desc()
{
std::cout << "I am " << className() <<
" and I own: " << _B->className() << std::endl;
}
protected:
B * _B;
};
Run Code Online (Sandbox Code Playgroud)
然后,我想扩展A并B提供新信息.我敢肯定,SuperA并SuperB有一个"是"的有关系A,并B分别.直接的方法是尝试继承:
class SuperB: public B
{
public:
virtual std::string className(){return "SuperB";}
}
class SuperA: public A
{
public: …Run Code Online (Sandbox Code Playgroud)