成员访问符.和->的区别?

doogi 2010-06-05 03:03:39
两者有什么区别,说具体点,最好用例子说明,谢谢
...全文
216 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoenpei002 2010-06-06
  • 打赏
  • 举报
回复

_ConnectionPtr不是实体类- -
MoXiaoRab 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nth2say 的回复:]
总结下11L


对于_ConnectionPtr pConn这样的智能指针。

_ConnectionPtr实际是一个模板类_com_ptr_t

pConn是对象,调用_com_ptr_t类成员函数用“.”

pConn.CreateInstance();调用成功会获得接口指针pInterface(类的私有成员变量)

_com_ptr_t类重载了"->"运算符,pCon……
[/Quote]
说得很好,赞一个
半刻沙漏 2010-06-05
  • 打赏
  • 举报
回复
->是用在指针后面的 .不是
Eleven 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 doogi 的回复:]
比如说:_ConnectionPtr pConn
pConn->Open();
pConn->Close();
pConn.CreateInstance();
pConn.Release();
为什么要这样分?有什么好处?
[/Quote]
(*pConn).Open();就和下面的一样了
nth2say 2010-06-05
  • 打赏
  • 举报
回复
总结下11L


对于_ConnectionPtr pConn这样的智能指针。

_ConnectionPtr实际是一个模板类_com_ptr_t

pConn是对象,调用_com_ptr_t类成员函数用“.”

pConn.CreateInstance();调用成功会获得接口指针pInterface(类的私有成员变量)

_com_ptr_t类重载了"->"运算符,pConn->Open();实际上是pInterFace->Open();

kcling 2010-06-05
  • 打赏
  • 举报
回复
->是对于指针,.是对于对象
nth2say 2010-06-05
  • 打赏
  • 举报
回复



看看 _ConnectionPtr的定义

_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));

#define _COM_SMARTPTR_TYPEDEF(Interface, IID) typedef _COM_SMARTPTR<Interface, &IID> Interface ## Ptr

#define _COM_SMARTPTR _com_ptr_t

综合起来就是
typedef _com_ptr_t< _Connection,__uuidof(_Connection)> _ConnectionPtr;

_ConnectionPtr pConn;是定义了一个模板类的对象。所以调用其成员函数CreateInstance()需要用.;

pConn->Open();
pConn->Close();
pConn.CreateInstance();
pConn.Release();

既然是对象那为什么会用->呢。看看_com_ptr_t的声明里面有这个:
// Allows this class to be used as the interface itself.
// Also provides simple error checking.
//
Interface* operator->() const
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}

return m_pInterface;
}
// The Interface.
//
Interface* m_pInterface;
他是重载了->,用pconn->实际上是用了它里面的接口指针。
maoenpei002 2010-06-05
  • 打赏
  • 举报
回复
_ConnectionPtr pConn
pConn->Open();
pConn->Close();
pConn.CreateInstance();
pConn.Release();
用法有误,正确如下:
_ConnectionPtr pConn;
_ConnectionPtr * ppConn = &pConn;
pConn.Open();
pConn.Close();
ppConn->Open();
ppConn->Close();
"."是对于对象实体的操作,"->"是对指针类型所指向的结构体的操作。基本上就是这么理解的。
surf515 2010-06-05
  • 打赏
  • 举报
回复
.左边只能时对象,->左边只能时指针
一条晚起的虫 2010-06-05
  • 打赏
  • 举报
回复
:_ConnectionPtr pConn

// _ConnectionPtr属于智能指针的范畴。
wltg2001 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 doogi 的回复:]
比如说:_ConnectionPtr pConn
pConn->Open();
pConn->Close();
pConn.CreateInstance();
pConn.Release();
为什么要这样分?有什么好处?
[/Quote]
上面不是说了吗。一个是指针,一个是对象,至于为什么这么分,指针与对象各有各的应用场合。
doogi 2010-06-05
  • 打赏
  • 举报
回复
比如说:_ConnectionPtr pConn
pConn->Open();
pConn->Close();
pConn.CreateInstance();
pConn.Release();
为什么要这样分?有什么好处?
doogi 2010-06-05
  • 打赏
  • 举报
回复
那怎么对象也可以用->来访问成员,而且还有就是,同一个对象用.访问到的和用->访问到的成员不同,为什么??
alicktony 2010-06-05
  • 打赏
  • 举报
回复
->是对于指针而言的,.是对于对象而言的
dianhui 2010-06-05
  • 打赏
  • 举报
回复
一个是对象,一个是指针,指针其实就是对象的地址!
你只要记住点操作是针对对象的,而箭头操作是针对指针的!
arong1234 2010-06-05
  • 打赏
  • 举报
回复
这不很明显么,.左边只能时对象,->左边只能时指针
wltg2001 2010-06-05
  • 打赏
  • 举报
回复
一个是用于类的成员变量,一个是用于指针,例如:
CMyDialog my;
my.Create(....);
或是:
CMyDialog *my=new CMyDialog;
my->Create(...);

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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