1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
// Clonable and nested Base, including their inline members:
class Clonable
{
public:
class Base;
private:
Base *d_bp;
public:
class Base
{
public:
virtual ~Base();
Base *clone() const;
private:
virtual Base *newCopy() const = 0;
};
Clonable();
explicit Clonable(Base *base);
~Clonable();
Clonable(Clonable const &other);
Clonable(Clonable &&tmp);
Clonable &operator=(Clonable const &other);
Clonable &operator=(Clonable &&tmp);
Base &base() const;
};
inline Clonable::Base *Clonable::Base::clone() const
{
return newCopy();
}
inline Clonable::Base &Clonable::base() const
{
return *d_bp;
}
// Derived and its inline member:
class Derived1: public Clonable::Base
{
public:
~Derived1();
private:
virtual Clonable::Base *newCopy() const;
};
inline Clonable::Base *Derived1::newCopy() const
{
return new Derived1(*this);
}
// Members not implemented inline:
Clonable::Base::~Base()
{}
|