指针

// gcc version egcs-2.91.57 19980901 (egcs-1.1 release)

#include
using namespace std;

class point{
    int moveCenterPoint();
public:
    int x,y;
    point(int=1,int=1);
    int instance();
    friend int f(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内容
    //------------------------------------------
    // 类成员指针,对象成员指针
    
    // 类数据成员指针

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

    // 对象数据成员指针
    point p;
    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

    return 0;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值