对象直接使用类的私有数据成员,解释原因

ewfc12ewrew 2011-06-15 06:09:13
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
A() {}
A(int n) {a=n;}
void Set(A); //形参是类A的对象
void Show() {cout<<a<<endl;}
~A() {}
};
void A::Set(A obj)
{a=obj.a;} //对象obj直接调用类的私有数据成员
void main()
{
A obj(1),OBJ(2);
obj.Show();
obj.Set(OBJ);
obj.Show();
}

...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
void A::Set(A obj)
{a=obj.a;} //对象obj直接调用类的私有数据成员

呵呵,楼主,你这个问题算是月经贴了

私有成员是针对对象来说,而不是类本身来说的
在你上面的函数中,Set是一个成员函数,其可以说是属于类本身,而类本身的东西可以访问其私有成员

就像
你的手可以随便摸你身上任何一个地方,但别人却不能摸,跟上面一样的道理,当然你可以把你的腿当成private
游牧小小诗人 2011-06-15
  • 打赏
  • 举报
回复
又学会一点。。。。。。。。。。。
就想叫yoko 2011-06-15
  • 打赏
  • 举报
回复
拷贝构造函数是比较典型的例子

你可以把这当做一种语法
这样在封装的基础上不失方便性
如此美丽的你 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dizuo 的回复:]

C++很注重作用域概念,所谓私有成员是在类内部可见,所以类内部就是类A的作用域。A的拷贝构造函数也属于类A作用域。
main函数内部不可以直接直接访问A的成员,是因为main函数作用域不属于类A作用域。
[/Quote]
++
無_1024 2011-06-15
  • 打赏
  • 举报
回复
已经回答的差不多了 其实还是在作用于里面的
注意最好用using std::cin;之类的
ryfdizuo 2011-06-15
  • 打赏
  • 举报
回复
C++很注重作用域概念,所谓私有成员是在类内部可见,所以类内部就是类A的作用域。A的拷贝构造函数也属于类A作用域。
main函数内部不可以直接直接访问A的成员,是因为main函数作用域不属于类A作用域。
downmooner 2011-06-15
  • 打赏
  • 举报
回复
语法就是这样的。
ryfdizuo 2011-06-15
  • 打赏
  • 举报
回复
void A::Set(A obj)
{
a=obj.a; //此时还是在类A的作用域内,当然可以直接访问私有成员了。。。
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧