これはなぜ機能しますか?クラスは自動的に自分自身の友人ですか?
#include <stdio.h>
class ClassA
{
public:
ClassA(int id) : my_id(id) { };
ClassA * makeNewA(int id)
{
ClassA *a = new ClassA(id);
printf("ClassA made with id %d\n", a->getId());
return a;
};
private:
int getId() {
return my_id;
};
private:
int my_id;
};
int main()
{
ClassA a(1);
ClassA *b = a.makeNewA(2);
return 0;
}
それは良いアイデアかどうかに関係なく、なぜ機能するのですか? public関数ClassA::makeNewA(int)
は新しいClassAをインスタンス化し、新しいオブジェクトを使用してプライベート関数getId()
を呼び出します。クラスは自動的に自分自身の友人ですか?
おかげ
クラスは常に自分自身の友人です。 – Shravan40
これは、C++のカプセル化がオブジェクトレベルではなく、クラスレベルであることを考える良い方法かもしれません。 –
@NirFriedman:厳密にはそうでないことを除いて - 同じメンバを継承したオブジェクトからでも、別のオブジェクトの 'protected'メンバにアクセスすることはできません。 – MSalters