一个C++中关于符号的问题

dyfh 2005-07-20 05:47:58
如以下三种:
std::cout
dt.da
this->da

这其中的:: . ->三种符号分别代表什么含义,有什么区别?望指点
...全文
413 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyfh 2005-07-21
  • 打赏
  • 举报
回复
非常感谢几位的回答,我基本上理解了

结贴
antter 2005-07-20
  • 打赏
  • 举报
回复
struct A
{
int a()
{
cout<<"a"<<endl;
return 0;
}
};
struct B
{
A ba;
A* operator ->()
{
return &ba;
}
A& operator*()
{
return ba;
}
};
int main()
{
A a;
A* pa=&a;
a.a();
pa->a();
B b;
B* pb=&b;
b->a();//重载了B的->
b.ba.a();
b.operator ->()->a();
(&b)->ba.a();
(&b)->operator ->()->a();
(*b).a();
(**pb).a();
}

A是正常的, B是经过重载的。
antijpn 2005-07-20
  • 打赏
  • 举报
回复
::是域操作符,作用域一般说的是变量的作用域,即符号可见范围

而域的概念就比较广了,可以是namespace scope也可以是class scope,具体需要看上下文,譬如std就是一个namespace scope

.和->都是成员选择操作符,不同的是.的左边是一个类对象或者类对象的引用,而->如果不是重载的话应该左边是一个指针
dyfh 2005-07-20
  • 打赏
  • 举报
回复
先去吃点饭,回来继续:)
dyfh 2005-07-20
  • 打赏
  • 举报
回复
to sumlu_eric
哦,这样讲我明白了一些

关于:: ,作用域的概念是什么?名字空间的概念又是什么?有关于这些概念性东西的讲解的链接?
sunlu_eric 2005-07-20
  • 打赏
  • 举报
回复
钱能书上的:当用点操作符时,它的左边应是一个结构变量,当用箭头操作符时,它的左边应是一个
结构指针。
dyfh 2005-07-20
  • 打赏
  • 举报
回复
to antter
抱歉,我的C++基础非常差,您所提到的间接(->)和直接(.)到底有何分别,在什么不同的情况下使用

比如,我用struct定义一个结构
struct A
{
int num;
}
A a={1};
取值时是使用a.num而不是a->num吧

同样,用class定义一个类时呢?
sunlu_eric 2005-07-20
  • 打赏
  • 举报
回复
当前面是指针时用->,是变量时用 .(这也是用引用而不用指针的好处之一)
::作用域区分符
antter 2005-07-20
  • 打赏
  • 举报
回复
可以转换使用
X->Y
=>
(*X).Y

X.Y
=>
(&X)->Y
antter 2005-07-20
  • 打赏
  • 举报
回复
不可以
一个是间接的(->),一个是直接的(.)。
dyfh 2005-07-20
  • 打赏
  • 举报
回复
哦,::是访问名字空间时用的

那么如您所讲.和->都可以访问对象和结构的成员,到底他们之间有何种区别呢?应当是不可以互相替换使用的吧
sant 2005-07-20
  • 打赏
  • 举报
回复
::引用std名字空间下的cout函数
.访问对象(结构体的)成员
-〉访问所指向对象,结构体的成员

65,210

社区成员

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

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