すみません。アクセス制御でわからなくなりました。
クラスBとクラスCで、using宣言を行っていますが、これは一見protected属性
の関数print()をpublicなアクセス属性に変換しているように見えるのですが、
そのように考えてよいのでしょうか。

#include <iostream>
using namespace std;

class A {
int i;
protected:
void print() const { cout << i << endl; }
public:
A() { i = 111; }
};

class B : protected A {
public:
using A::print; // void print() const { A::print(); }
};

class C : protected B {
public:
using B::print; // void print() const { A::print(); }
};

int main()
{
B b;
C c;

b.print();
c.print();
}