指针

来源:互联网 发布:淘宝商家怎么找客服 编辑:程序博客网 时间:2024/06/01 09:25
// gcc version egcs-2.91.57 19980901(egcs-1.1 release)

#include
using namespace std;

class point{
    intmoveCenterPoint();
public:
    intx,y;
   point(int=1,int=1);
    intinstance();
    friend intf(point &); // 友元函数
};


int main(){

   // 以int数据类型为例
    int a =1;
    int b =2;

    // 常量指针 int const *i
    int const *i= &a;
    i = &b;// 更改自己地址指向

    // 指针常量 int *const j
    int *const j= &a;
    *j = b;// 更改a内容
    //------------------------------------------
    //类成员指针,对象成员指针
    
    //类数据成员指针

    intpoint::*x1 = &point::x;

    // 对象数据成员指针
    pointp;
    int *y1 =&p.y;

   cout<<p.instance()<<endl;// 1*1+1*1 = 2

    p.*x1 =2;
   cout<<p.instance()<<endl;// 2*2+1*1 = 5

    *y1 =3;
   cout<<p.instance()<<endl;// 2*2+3*3 = 13

    // 类成员函数指针
    int(point::*pInstance)();
    pInstance =&(point::instance); //不同编译器写法不同

   cout<<(p.*pInstance)()<<endl;// 13

    
    //------------------------------------------
    //函数指针

    int(*p1)(point &);
    p1 =&(f); // 不同编译器写法不同
   cout<<(*p1)(p)<<endl; // 2*(2+1) + 3*(3+1) = 18

    return0;
}

//x,y默认值都为1,且如果point传递参数则x=a,y=b
point::point(int a,int b){
    x = a;
    y = b;
}
int point::instance(){
    returnx*x+y*y;
}
int point::moveCenterPoint(){
    returnx*(x+1)+y*(y+1);
}
int f(point &p){
    returnp.moveCenterPoint();
}

原创粉丝点击