zoukankan      html  css  js  c++  java
  • 81.类成员函数指针高级

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //myclass类
     5 class myclass
     6 {
     7 public:
     8     int add(int a, int b)
     9     {
    10         return a + b;
    11     }
    12     int sub(int a, int b)
    13     {
    14         return a - b;
    15     }
    16     int mul(int a, int b)
    17     {
    18         return a * b;
    19     }
    20     int divv(int a, int b)
    21     {
    22         return a / b;
    23     }
    24 };
    25 
    26 //类成员函数当做引用参数
    27 void change(int(myclass::*&p)(int, int))
    28 {
    29     p = &myclass::sub;
    30 }
    31 
    32 //changeit的参数是类成员函数指针的引用,返回值是类成员函数指针的引用
    33 //类成员函数指针作为参数退化为二级类成员函数指针
    34 int(myclass::*&  changit(  int(myclass::* &p)(int, int)  )  )(int, int)
    35 {
    36     p = &myclass::sub;
    37     return p;
    38 }
    39 
    40 void main()
    41 {
    42     myclass *pclass(nullptr);//空指针
    43     //int(myclass::*p)(int, int) = &myclass::add;//类成员函数指针
    44     //cout << pclass->add(1, 2) << endl;
    45     //cout << (pclass->*p)(2, 3) << endl;
    46     int(myclass::*p[4])(int, int) { &myclass::add, &myclass::sub, &myclass::mul, &myclass::divv };
    47     //下标方式循环
    48     for (int i = 0; i < 4; i++)
    49     {
    50         //调用类成员函数数组
    51         cout << (pclass->*p[i])(100, 10) << endl;
    52     }
    53 
    54     //指针方式循环(二级类成员函数指针遍历类成员函数指针)
    55     for (int(myclass::**pp)(int, int) = p; pp < p + 4; pp++)
    56     {
    57         cout << (pclass->**pp)(100, 10) << endl;
    58     }
    59 
    60     //在堆上创建类成员函数指针
    61     int (myclass::**p2)(int,int) = new (int(myclass::*[4])(int,int)){ &myclass::add, &myclass::sub, &myclass::mul, &myclass::divv };
    62     for (int i = 0; i < 4; i++)
    63     {
    64         //调用类成员函数数组
    65         cout << (pclass->*p2[i])(100, 10) << endl;
    66     }
    67 
    68     int(myclass::*p3)(int, int) = &myclass::add;
    69     change(p3);
    70     (pclass->*p3)(12, 2);
    71     cin.get();
    72 }
  • 相关阅读:
    uni-app-数据缓存
    uni-app-网络请求
    uni-app-上拉加载
    uni-app-下拉刷新
    uni-app-生命周期
    uni-app字体图标
    uni-app-样式
    [Python] ValueError: Unknown resampling filter
    [Python]列表复制以及切片[:][::]解析
    LeetCode 29. 两数相除
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8584689.html
Copyright © 2011-2022 走看看