什么是C ++中的代理类?

在这里,我们将看到什么是C ++中的代理类。Proxy类基本上是Proxy设计模式。在这种模式下,对象为另一个类提供了修改后的接口。让我们来看一个例子。

在此示例中,我们要创建一个只能存储二进制值[0,1]的数组类。这是第一次尝试。

范例程式码

class BinArray {
   int arr[10];
   int & operator[](int i) {
      //在这里放一些代码
   }
};

在此代码中,没有条件检查。但是,如果我们放arr [1] = 98之类的东西,我们希望operator []抱怨。但这是不可能的,因为它是在检查索引而不是值。现在,我们将尝试使用代理模式解决此问题。

范例程式码

#include <iostream>
using namespace std;
class ProxyPat {
   private:
      int * my_ptr;
   public:
      ProxyPat(int& r) : my_ptr(&r) {
      }
      void operator = (int n) {
         if (n > 1) {
            throw "This is not a binary digit";
         }
         *my_ptr = n;
      }
};
class BinaryArray {
   private:
      int binArray[10];
   public:
      ProxyPat operator[](int i) {
         return ProxyPat(binArray[i]);
      }
      int item_at_pos(int i) {
         return binArray[i];
      }
};
int main() {
   BinaryArray a;
   try {
      a[0] = 1; // No exception
      cout << a.item_at_pos(0) << endl;
   }
   catch (const char * e) {
      cout << e << endl;
   }
   try {
      a[1] = 98; // Throws exception
      cout << a.item_at_pos(1) << endl;
   }
   catch (const char * e) {
      cout << e << endl;
   }
}

输出结果

1
This is not a binary digit