zoukankan      html  css  js  c++  java
  • C++中的指针和>操作符

    容易引起误解的是->操作符,特别是没什么基础的初学者在cb这样的开发环境中。因为cb中的控件全部属于动态创建的,其返回的全部都是指针。所以常给人这样的感觉:"->"操作符和"."操作符一样,都是成员操作符,所不同的是"."操作符用于静态创建的对象,"->"操作符用于动态创建的对象。

    不能说这种说法不对,但是不够深入彻底。回忆C语言中的指针部分,就可以想起,"->"操作符最初是运用于指针的。还记得当时老师说这个符号的时候说过:“你看这个符号的样子,它就是代表指向!”

    可能常使用vcl控件,已经将"->"等价于成员操作符了。其实不然,它只是运用于指针。比如有这样一个类(结构体和类基本上一样)TDate;要创建一个类实例,一般有下面两种: TDate date1;                                          //method1 TDate date2 = new TDate();                  //method2 第一种方法是静态创建的,它创建于栈中,返回的是一个TDate型的对象实例,就和int i 一样。而第二种方法是动态创建,它创建于堆中,返回的不是一个对象实例,而是一个指向一个TDate型对象的指针。也就是说,new操作符返回的是一个指针,这个指针指向一个对象实例。这和java或者js或c#不一样,new出来的就直接是对象,因为这些语言中没有指针。所以c++中new出来的对象必须手动delete掉,否则其内存不会自动释放。c++中的new相当于C中的mallon(),而delete相当于C中的free()。

    那么如果TDate类中有个成员为int x,那么上述两种方法创建的对象分别访问x的方法为: date1.x         和 date2->x 因为这里date1是一个对象,"."表示对象的成员,date1.x表示对象date1的成员x。而date2是一个指针,"->"表示指针的指向,date2->x表示指针指向的成员x。如果还是不太清楚,那下面的句话应该可以帮助一下理解:(*date2).x和date2->x等价。也就是说,因为date2是一个指针,那么*date2就是一个对象,这时候就可以使用成员操作符.了。之所以用(),是因为.的优先权大于*。

  • 相关阅读:
    普元云计算-阿里云上的容器技术实践详解
    普元云计算-微服务架构实战:Swagger规范RESTful API
    普元云计算-元数据驱动的微服务架构(上)
    普元云计算-云计算平台项目团队组织架构与缘起
    普元云计算-新一代数字化企业云平台缘起
    普元云计算-为什么选择Kubernetes作为云平台的微服务治理框架
    快捷键对比
    spring mvc带参数重定向
    微信公众号菜单与应用交互session
    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • 原文地址:https://www.cnblogs.com/yaowen/p/2850213.html
Copyright © 2011-2022 走看看