#include <iostream>
class A {
private:
int number;
public:
A(int i) : number(i)
{}
virtual ~A()
{}
virtual void Number(int c)
{ number = c; } virtual int Number()
{ return number; } };
class B : private A {
private:
int second_number;
public:
B(int c, int i) : second_number(c), A(i)
{}
virtual ~B()
{}
virtual void firstNumber(int b) { A::Number(b); }
virtual int firstNumber() { return A::Number(); }
};
class C {
private:
B* bobject;
public:
C(B* bp) : bobject(bp)
{}
virtual ~C()
{}
virtual void setBValue(int i)
{ if (bobject) bobject->Number(i); } virtual int getBValue()
{ if (bobject) { return bobject->Number(); } return 0; }};
int main()
{
B* bobject = new B(2, 1);
C* cobject = new C(bobject);
cobject->setBValue(8);
std::cout << cobject->getBValue() << std::endl;
delete bobject;
delete cobject;
}