1 #include<iostream> 2 #include<windows.h> 3 using namespace std; 4 class T 5 { 6 private: 7 int x; 8 public: 9 T(int r):x(r){}; 10 T(const T& t){x=3*t.x;} 11 void show(){cout<<"x="<<x<<endl;} 12 }; 13 int main() 14 { 15 T t1(2); 16 T t2(t1); 17 t1.show(); 18 t2.show(); 19 system("pause"); 20 }
很简单的一个例子,我不明白为什么里面的拷贝构造函数中直接可以有t.x这样的表达式存在,因为我知道如果main()中有cout<<t.x<<endl; 这样的句子一定会报错的,麻烦解释下什么情况下可以像这样直接使用“对象名.私有变量名”?
T对象的成员函数可以访问所有的变量,private类型自然也可以访问,即使是其它T对象的私有变量也可以访问。
而main函数不属于T对象,自然不能访问t变量。
T1的成员函数可以访问T2的私有变量,太神奇了?有没有很强大的论据?
因为copy构造函数是在类的定义内,被copy的那个实例也是本类的,所以,不算越权。
属于正常访问本类的变量。
虽然不是同一个实体,但是,属于同一个定义。