c++中 . 和 -> 的区别是什么?

重新解释一下,原来的在下面:
来源自最近看《雍正王朝》的新感悟,你可以对于这个“.”“->”方面你可以这么理解。

方便理解的说法

结构体(Struct)跟类(Class)性质是一样的,下面为了看着方便,我就只写类了。

  • 实例化对象是一个皇上老子
  • 类内的数据和成员是一群朝廷官员

皇上老子能够管理所有的朝廷官员,也就是实例化对象有着所有类内的数据和成员的控制能力。皇上老子想管理手下的朝廷官员实例化对象想操作 类内的数据和成员),有两个方式

  • 找个人按照操作流程给官员下诏书
  • 找个人带着尚方宝剑给官员传话

在字面理解上,这两种方式的严重程度是不一样的,见尚方宝剑如见人,那个人说的任何话理论上就是皇上老子在当着你面说的。** -> ** 就是带着尚方宝剑在对类内的数据和成员进行操作,他可以直接操纵内存上的数据。而** . ** 是按照操作流程一步一步的把消息下发出去。在这里:

  • 找个人按照操作流程给官员传话——使用实例化对象对数据进行操作
  • 找个人带着尚方宝剑给官员传话——使用指针直接对内存进行操作

尚方宝剑的权利交出去是很可怕的,你不确定什么时候出什么问题,就像在最开始学习C++我们轻易不会使用指针,直接对内存进行操作很危险。而找个人按照操作流程进行操作,就是让系统按照你写的替你办事,也许速度上不如直接操纵内存来的快,但系统不会做一些危险的动作,这样更安全。

正式一点是这样:

  • 类实例化出来的对象类内的数据和成员进行操作时,只能用** . **
  • 类实例化出来的对象的指针类内的数据和成员进行操作时,只能用** -> **(直接操作内存很特殊,符号当然也要与众不同)

反过来:

  • 你见到** . ** 的时候,这是实例化的对象在进行操作类内的数据和成员
  • 你见到** -> ** 的时候,这是实例化的对象的指针在进行操作类内的数据和成员

值得一提的是,把 实例化对象比作是一个皇上老子并不准确,但是相对好理解。

我们现在有一个 学生类

class Student// 定义一个学生类
{
    int name; // 姓名
    int age;  // 年龄
};
void main()
{
    Student ZhangSan;   // 实例化一个类的对象
    Student *p;		// 定义一个属于这个Student类的指针
    p = &ZhangSan;		// 初始化指针
    
    Zhangsan.age = 18;// 实例化出来的对象进行操作 
    p->age = 18;	  // 指针进行操作       
}

原来解释的:
** . ** 用于 类 类型的 对象 访问类中的成员
** -> ** 用于 类 类型的 指针 访问类中的成员

换个通俗点的说法就是:想要执行的目的可能都是同一个,但“碍于”自己身份的不同,只能走不同的路,采取不同的方式去执行这件事。
都是要出发到某地去(目的相同),有些人只能飞着去,有些人只能坐车去(方式不同)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值