C++だけ微妙に弱気なタイトルですが…
RubyやJavaやC#だと外部から色々頑張ればどうにかなったけど、C++ではどうにもならない。
#include <iostream>
class A
{
private:
void Foo() { std::cout << "A#Foo" << std::endl; }
};
class B
{
public:
void Bar()
{
A a;
a.Foo(); // どうあがいてもコンパイルエラー
}
};
int main()
{
B b;
b.Bar();
return 0;
}
こういう場合は、C++では明示的にAクラスからBクラスに対してprivateメンバへのアクセスを許可する方法が提供されてるのでそれを使います。
書き方は、「friend class クラス名;」というわけでやってみよう。
#include <iostream>
class B; // AでBを見るために前方宣言
class A
{
friend class B; // Bさんには私の全てを見せます
private:
void Foo() { std::cout << "A#Foo" << std::endl; }
};
class B
{
public:
void Bar()
{
A a;
a.Foo(); // お友達なのでprivateな所も呼べる
}
};
int main()
{
B b;
b.Bar();
return 0;
}
実行すると、A#Fooと表示される。
投稿日時 : 2008年3月14日 18:05