下のjavaのコードをC++にしようと思ったんですが、コンパイルエラーが出てしまいます。こういうとき、C++ではprotectedの代わりに何を使えばいいんでしょうか?あきらめてpublicなのかなぁ。 [Main.java] abstract class A { protected abstract void foo(); } class B extends A { protected void foo(){System.out.println("foo!");} public void bar(){pa.foo();} public void set(A p){pa = p;} private A pa; } public class Main { public static void main(String[] args) { B b = new B(); b.set(b); b.bar();}} $ javac Main.java; java Main foo! [protected.cpp] #include <iostream> class A { protected://public:とすれば問題無し virtual void foo()=0; }; class B : public A { protected: void foo() {std::cout << "foo!" << std::endl;} public: void bar() {pa->foo();} void set(A* p) {pa = p;} private: A *pa; }; int main() { B b; b.set(&b); b.bar(); return 0;} $ g++ protected.cpp protect.cpp:4: error: ‘virtual void A::foo()’ is protected protect.cpp:10: error: within this context