一般的情况是类中的私有数据成员,只能是类的对象自己可以修改,从外部是不能更改的如下例子
#include<iostream>
using namespace std;
class Data
{
private:
int i;
public:
Data()
{
i=0;
}
int* geti()
{
return &i;
}
void printi()
{
cout<<"i= "<<i<<endl;
}
};
void main()
{
Data datas;
datas.printi();
int *i=datas.geti();
*i=1;
datas.printi();
}
但是我们C++语言设计的初衷是让类的私有数据成员禁止让外部访问,难道这与C++的标准背离了么,其实没有,类中向下面这么设计就OK了
#include<iostream>
using namespace std;
class Data
{
private:
int i;
public:
Data()
{
i=0;
}
const int* geti()
{
return &i;
}
void printi()
{
cout<<"i= "<<i<<endl;
}
};
void main()
{
Data datas;
datas.printi();
const int *i=datas.geti();//程序会报告错误:error C2166: l-value specifies const object,这样就防止了外部修改
*i=1;
datas.printi();
}
但是,上面的代码在改变一下,呵呵 ,还是能修改类中的私有数据变量
#include<iostream>
using namespace std;
class Data
{
private:
int i;
public:
Data()
{
i=0;
}
const int* geti()
{
return &i;
}
void printi()
{
cout<<"i= "<<i<<endl;
}
};
void main()
{
Data datas;
datas.printi();
int *i=(int *)(datas.geti());// 重点在这里
*i=1;
datas.printi();
}