zoukankan      html  css  js  c++  java
  • C++——指针4

    8、对象指针  声明: 类名 *对象指针名

    Point A(5,10);

    Point *ptr;

    ptr=&A;//通过指针访问对象成员:对象指针名->成员名。ptr->getX();相当于(*ptr).getX;

    曾经错误的前向引用的例子

    class Fred; //前向引用声明

    class Barney {   Fred x; //错误:类Fred的声明尚不完善,若改成Fred *x;就正确了。 };//因为没有声明fred类的对象,编译器不知道如何分配内存,所以出错,如果//改成指针类型的对象,相当于unsigned long类型,编译器可以明确处理。

    class Fred {   Barney y; }; 

    This指针 隐含于每一个类的成员函数中的特殊指针,存放当前对象的地址,通过对象名调用成员函数,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据进行操作时,就隐含使用了this指针。如:point类的构造函数中语句 X=xx;相当于this->X=xx;

    8.1 指向类的非静态成员的指针  通过指向成员的指针只能访问公有成员,声明:指向公有数据成员的指针 类型说明符 类名::*指针名;   指向公有函数成员的指针   类型说明符  (类名::*指针名)(参数表);仅仅这样声明之后并不能直接使用,必须指明指针指向那个成员,需要赋给指针地址(初始化)。指针名=&类名::数据成员名;该处只是赋给指针一个相对地址,因为一个数据成员名并没有一个确切的地址,因此还需要落实到对象名(起始地址),结合相对地址(偏移量)才能真正访问到数据成员:

    对象名.*类成员指针名;  对象指针名->*类成员指针名

     

    6-13 访问对象的公有成员函数的不同方式

    int main()   //主函数

    { Point A(4,5);       //声明对象A

     Point *p1=&A;   //声明对象指针并初始化

       //声明成员函数指针并初始化

     int (Point:::*p_GetX)()=Point::GetX;     

       //1)使用成员函数指针访问成员函数

     cout<<(A.*p_GetX)()<<endl;       

       //2)使用对象指针访问成员函数

     cout<<(p1->GetX)()<<endl;        

       //3)使用对象名访问成员函数

    cout<<A.GetX()<<endl;  }

  • 相关阅读:
    vue项目架构
    vue.js 视频播放
    Intellij使用"easyexplore"
    ScrollView嵌套GridView不显示顶部
    Android开发日志统一管理
    Android带弹性的View
    Mysql数据库乱码
    为Activity生成桌面快捷方式
    二维码扫描ZXing简化
    减少XML文件数
  • 原文地址:https://www.cnblogs.com/lemaden/p/10237997.html
Copyright © 2011-2022 走看看