c++ sample

c++ sample

位移凑数
stt st1 = {i1=222, i2=333};
int t1 = (st1.i1 << 16 | st1.i2);    //i1,i2合体, i1左移到高位, i2放到右边低位
int i1 = (t1 >> 16);    //右移去低位, 剩i1
int i2 = (t1 ^ (i1 << 16);    //去左边高位头, 剩i2


紧凑结构
struct S1 {
    int32_t a;
    int b;
    int c;
} __attribute__ ((packed));


友元类
class B {
    public :
    int geta();
};

class A {
    private :
    int a;
    friend class B;
};

int B::geta() {
    A a1;
    a1.a = 2;
    return a1.a;
}

B b;
b.geta() == 2;

函数指针
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
f = &func;

int add(int a, int b);
int subtraction(int a, int b);

struct p_fun {
    int (*pFunAdd) (int a, int b);
    int (*pFunSubtraction) (int a, int b);
};

int main() {
    p_fun pFun;
    pFun.pFunAdd = add;
    pFun.pFunSubtraction = subtraction;
    printf("%d, %d", pFun.pFunAdd(1, 2), pFun.pFunSubtraction(2, 1));
    return 0;
}

指针交换
{
    int i;
    i = *p1;    //p1缓存到i
    *p1 = *p2;
    *p2 = i;    //p2=原p1
}
指针计算
{
    *p, *q;
    q = p - 1;
    p - q == 1;                //偏移
    (int)p - (int)q = 8;    //地址值
}

成员函数指针
class MyClass {
public:
    static int FunA(int a, int b) {return a + b;}
 
    void FunB() {...}
 
    void FunC() {}
 
    int pFun1(int (*p)(int, int), int a, int b) {return (*p)(a, b);}
 
    void pFun2(void (MyClass::*nonstatic)()) {(this->*nonstatic)();}
};
 
int main() {
    MyClass* obj = new MyClass;
    // 静态函数指针的使用
    int (*pFunA)(int, int) = &MyClass::FunA;
    cout << pFunA(1, 2) << endl;
     
    // 成员函数指针的使用
    void (MyClass::*pFunB)() = &MyClass::FunB;
    (obj->*pFunB)();
     
    // 通过 pFun1 只能调用静态方法
    obj->pFun1(&MyClass::FunA, 1, 2);
     
    // 通过 pFun2 就是调用成员方法
    obj->pFun2(&MyClass::FunB);
    obj->pFun2(&MyClass::FunC);
 
    delete obj;
    return 0;
}

functio

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值