C++中private的作用域,const对象调用非const函数的问题

最近学习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;

原文地址:https://www.cnblogs.com/cxjchen/p/2765131.html