重新解释一下,原来的在下面:
来源自最近看《雍正王朝》的新感悟,你可以对于这个“.”“->”方面你可以这么理解。
方便理解的说法
结构体(Struct)跟类(Class)性质是一样的,下面为了看着方便,我就只写类了。
- 实例化对象是一个皇上老子
- 类内的数据和成员是一群朝廷官员
皇上老子能够管理所有的朝廷官员,也就是实例化对象有着所有类内的数据和成员的控制能力。皇上老子想管理手下的朝廷官员(实例化对象想操作 类内的数据和成员),有两个方式
- 找个人按照操作流程给官员下诏书
- 找个人带着尚方宝剑给官员传话
在字面理解上,这两种方式的严重程度是不一样的,见尚方宝剑如见人,那个人说的任何话理论上就是皇上老子在当着你面说的。** -> ** 就是带着尚方宝剑在对类内的数据和成员进行操作,他可以直接操纵内存上的数据。而** . ** 是按照操作流程一步一步的把消息下发出去。在这里:
- 找个人按照操作流程给官员传话——使用实例化对象对数据进行操作
- 找个人带着尚方宝剑给官员传话——使用指针直接对内存进行操作
把尚方宝剑的权利交出去是很可怕的,你不确定什么时候出什么问题,就像在最开始学习C++我们轻易不会使用指针,直接对内存进行操作很危险。而找个人按照操作流程进行操作,就是让系统按照你写的替你办事,也许速度上不如直接操纵内存来的快,但系统不会做一些危险的动作,这样更安全。
正式一点是这样:
- 用类实例化出来的对象对类内的数据和成员进行操作时,只能用** . **
- 用类实例化出来的对象的指针对类内的数据和成员进行操作时,只能用** -> **(直接操作内存很特殊,符号当然也要与众不同)
反过来:
- 你见到** . ** 的时候,这是实例化的对象在进行操作类内的数据和成员
- 你见到** -> ** 的时候,这是实例化的对象的指针在进行操作类内的数据和成员
值得一提的是,把 实例化对象比作是一个皇上老子并不准确,但是相对好理解。
我们现在有一个 学生类
class Student// 定义一个学生类
{
int name; // 姓名
int age; // 年龄
};
void main()
{
Student ZhangSan; // 实例化一个类的对象
Student *p; // 定义一个属于这个Student类的指针
p = &ZhangSan; // 初始化指针
Zhangsan.age = 18;// 实例化出来的对象进行操作
p->age = 18; // 指针进行操作
}
原来解释的:
** . ** 用于 类 类型的 对象 访问类中的成员
** -> ** 用于 类 类型的 指针 访问类中的成员
换个通俗点的说法就是:想要执行的目的可能都是同一个,但“碍于”自己身份的不同,只能走不同的路,采取不同的方式去执行这件事。
都是要出发到某地去(目的相同),有些人只能飞着去,有些人只能坐车去(方式不同)