【发布时间】:2017-01-17 03:56:04
【问题描述】:
为什么会这样?
#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;
}
不管它是否是一个好主意,为什么它会起作用?公共函数ClassA::makeNewA(int) 实例化一个新的ClassA,然后使用新对象调用私有函数getId()。一个类会自动成为它自己的朋友吗?
谢谢
【问题讨论】:
-
班级永远是自己的朋友。
-
也许更好的思考方式是 C++ 封装是类级别,而不是对象级别。
-
@NirFriedman:除非严格来说这不是真的 - 你不能访问另一个对象的
protected成员,即使是从继承了相同成员的对象。
标签: c++