最近学习C++,用复制构造函数,产生了一些疑问。
1 class test{ 2 private: 3 int a; 4 public: 5 test(); 6 test(const test& T){ 7 a = T.a; 8 }; 9 ~test(); 10 int getdate();//返回a的值,实现我就不写了 11 }
这样写是可以直接把T的成员变量a的值赋给本类的a的。这说明private的作用域是相对于类而言的,而不是相对于某一个对象的类而言,只要是在同样名字的一个类中都是可以直接调用private变量的。
然后我改写了一下
1 class test{ 2 private: 3 int a; 4 public: 5 test(); 6 test(const test& T){ 7 a = T.getdata(); 8 }; 9 ~test(); 10 int getdate();//返回a的值,实现我就不写了 11 }
发现这样编译器报错。后来找到原因是因为const对象调用自己的函数时会自动把函数转换成const this指针,也就是说把函数变成const类型,而类中的getdata不是const类型,所以就会报错。
修改的方法是改成int getdata() const;