
C++私有成员变量通过指针的访问和赋值
代码如下,已经编译通过执行,请问这种通过指针给私有成员变量赋值的方式是否违背了数据封装的意图?#include<iostream>usingnamespacestd;cl...
代码如下,已经编译通过执行,请问这种通过指针给私有成员变量赋值的方式是否违背了数据封装的意图?
#include<iostream>
using namespace std;
class node
{
private:
int a;
public:
void setA(int a);
int* getA();
};
int* node::getA()
{
return &a;
}
void node::setA(int a)
{
this->a=a;
}
int main()
{
node N;
N.setA(3);
cout<<"A="<<*(N.getA())<<endl;
int* b=N.getA();
int c=6;
*b=c;
cout<<"A="<<*(N.getA())<<endl;
//cout<<"A="<<*(N.getA())<<endl;
return 0;
}
运行结果是:
A=3
A=6 展开
#include<iostream>
using namespace std;
class node
{
private:
int a;
public:
void setA(int a);
int* getA();
};
int* node::getA()
{
return &a;
}
void node::setA(int a)
{
this->a=a;
}
int main()
{
node N;
N.setA(3);
cout<<"A="<<*(N.getA())<<endl;
int* b=N.getA();
int c=6;
*b=c;
cout<<"A="<<*(N.getA())<<endl;
//cout<<"A="<<*(N.getA())<<endl;
return 0;
}
运行结果是:
A=3
A=6 展开
2个回答
展开全部
是,有违数据隐藏,如非必要不建议这样做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针用于低级的操作,C++程序员应该尽量避免使用指针和数组。
一方面是因为使用标准库更方便,更安全;另一方面是管理指针成员比较复杂,指针可能会破坏类的安全性。
至于返回指针的成员函数,可能会破坏数据的封装特性。类的安全性主要还是由类的设计者来实现。比如你可以将数据成员声明为public,那就完全没有安全性可言。将不需要改变的对象声明为const是一种安全的措施。
对你的程序来说,为了保护数据的封装特性,可以将函数声明为返回const对象:
const int * getA();
这样就只能读取A的数据成员,而不能改变它
一方面是因为使用标准库更方便,更安全;另一方面是管理指针成员比较复杂,指针可能会破坏类的安全性。
至于返回指针的成员函数,可能会破坏数据的封装特性。类的安全性主要还是由类的设计者来实现。比如你可以将数据成员声明为public,那就完全没有安全性可言。将不需要改变的对象声明为const是一种安全的措施。
对你的程序来说,为了保护数据的封装特性,可以将函数声明为返回const对象:
const int * getA();
这样就只能读取A的数据成员,而不能改变它
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询