example
如下例:
class Test
{
public:
Test(int v) : val(v)
{}
Test(const Test& t)
{ val = 100; cout << t.val << endl; }
void show(Test a)
{ cout << a.val << endl; cout << val << endl; }
private:
int val;
};
int main()
{
Test v1(99); //v1.val = 99
Test v2(v1); //v2.val = 100
v1.show(v2);
}
结果如下例:
99 //第一次拷贝构造
100 //传参调用了拷贝构造
100 //执行show()
99 //执行show()
疑问
难道我们不应该提供几个public
的接口给Test
返回其类内私有成员val
么?
引用C++标准原文
A member of a class can be
— private; that is, its name can be used only by members and friends of the class in which it is
declared.
— protected; that is, its name can be used only by members and friends of the class in which it is
declared, and by members and friends of classes derived from this class (see 11.5).
— public; that is, its name can be used anywhere without access restriction.
访问限制标号是针对类而不是针对一个类的不同对象,只要同属一个类就可以不用区分同一个类的不同对象。因为 是类的成员函数,所以有权限访问私有数据成员。如果是在main函数中直接,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。
C++的访问控制是类层面的 class-level
, 而不是对象级别的object-level
,
同一个类可以访问所有自己类实例的私有成员, 数据成员是类私有而不是实例私有, 成员是否可访问是类的性质, 而不是对象的性质