深い継承は使わない方がいいかなー。
#include <iostream> using namespace std; class Foo { protected: int i; public: Foo(int i) : i(i) {} void foo() { cout << i << endl; } }; class Bar : /*private*/ protected Foo { public: Bar(int i) : Foo(i) {} void bar() { cout << i << endl; } }; class Zoo : private Bar { public: Zoo(int i) : Bar(i) {} void zoo() { cout << i << endl; } }; int main() { Zoo zoo(100); zoo.zoo(); return 0; }