网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月05日漏签0天
c++吧 关注:653,660贴子:2,117,987
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 9回复贴,共1页
<<返回c++吧
>0< 加载中...

C++中关于私有成员变量的访问。

  • 只看楼主
  • 收藏

  • 回复
  • Provence_yzy
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如下程序段:#include <iostream>using namespace std;
class Point{ int x, y;
public: void set(int a, int b) { x = a; y = b; } Point operator+(const Point& d) { Point s; s.set(x + d.x, y + d.y); return s; } friend ostream& operator<<(ostream& o, const Point& d);};inline ostream& operator<<(ostream& o, const Point& d){ return o<<"("<<d.x<<","<<d.y<<")\n";}
int main(){ Point s, t; s.set(2, 5); t.set(3, 1); cout<<s + t; system("pause"); return 0;}
我想问的是,在operator+ 这个成员函数中,为什么可以是用 s.set(x+d.x, y+d.y);来访问d.x,x不是private的吗,既然是private,就只能由类的成员函数或是友元函数来访问,怎么可以用类的对象d来访问x


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你自己不都说了可以用成员函数访问?


2026-03-05 09:15:38
广告
不感兴趣
开通SVIP免广告
  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用成员函数访问,没说必须用this访问。
访问权限和类有关,和具体对象无关。


  • Provence_yzy
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
太乱了,我重新整理一下。
#include <iostream>
using namespace std;
class Point{
int x, y;
public:
void set(int a, int b)
{
x = a; y = b;
}
Point operator+(const Point& d)
{
Point s;
s.set(x + d.x, y + d.y);
return s;
}
friend ostream& operator<<(ostream& o, const Point& d);
};
inline ostream& operator<<(ostream& o, const Point& d)
{
return o<<"("<<d.x<<","<<d.y<<")\n";
}
int main()
{
Point s, t;
s.set(2, 5);
t.set(3, 1);
cout<<s + t;
system("pause");
return 0;
}
我想问的是,在operator+ 这个成员函数中,为什么可以是用 s.set(x+d.x, y+d.y);来访问d.x,x不是private的吗,既然是private,就只能由类的成员函数或是友元函数来访问,怎么可以用类的对象d来访问x


  • Provence_yzy
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大哥,能不能说的具体些,我总感觉operator+这个函数中不能访问 d.x,比如,
class A{
int x;
}
int main()
{
A a;
cout<<a.x<<endl;
return 0;
}
用 a.x 这样访问应该是错的吧。
同理,s.set(x+d.x, y+d.y);中的 d.x 呢?



  • fyowme
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这些接口是共享的,并不属于任一对象.
Point operator+(const Point& d)
{
Point s;
s.set(x + d.x, y + d.y);//隐藏了this指针s.set(this->x + d.x, this->y + d.y);
return s;
}


  • 阿欲孤樱2k
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
6楼正解,其实是隐藏了this指针,
Point operator+(const Point& d)
{
Point s;
s.set(x + d.x, y + d.y);
return s;
} 顺便说一下,这样是可以的,类的共有函数怎么不能访问它的私有成员了??
int main()
{
A a;
cout<<a.x<<endl;
return 0;
} main函数当然访问不成,x是类的私有成员,对main是隐藏的



  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
main是在A的外部,当然就是错的。
A的成员在A的内部,因此可以访问。
你可以把一个类看成自身的友元。


2026-03-05 09:09:38
广告
不感兴趣
开通SVIP免广告
  • Provence_yzy
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哦,行,谢谢大家啊,辛苦了。


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

[土文处理登记字]2013-014:
@linghanjunzi 在 2013-02-23 16:11 通过回复挖坟,已删除。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示