Что такое Прокси-класс в C++

Поздно на вечеринке, но недавно я столкнулся с этой проблемой, и мне пришлось что-то делать в соответствии с: -

class RandomObject {

RandomObject(this.x, this.y);

RandomObject.clone(RandomObject randomObject): this(randomObject.x, randomObject.y);

int x;
int y;
}

Затем, вы можете просто вызвать копию с оригиналом, например так: -

final RandomObject original = RandomObject(1, 2);
final RandomObject copy = RandomObject.clone(original);
42
задан mahesh 25 April 2018 в 05:45
поделиться

2 ответа

Прокси-сервер - это класс, который предоставляет модифицированный интерфейс для другого класса.

Вот пример - предположим, у нас есть класс массива, который мы хотим содержать только двоичные цифры (1 или 0). Вот первая попытка:

struct array1 {
    int mArray[10];
    int & operator[](int i) {
      /// what to put here
    }
}; `

Мы хотим, чтобы оператор [] выдавал, если мы говорим что-то вроде a [1] = 42 , но это невозможно, потому что только этот оператор видит индекс массива, а не сохраняемое значение.

Мы можем решить эту проблему с помощью прокси:

#include <iostream>
using namespace std;

struct aproxy {
    aproxy(int& r) : mPtr(&r) {}
    void operator = (int n) {
        if (n > 1 || n < 0) {
            throw "not binary digit";
        }
        *mPtr = n;
    }
    int * mPtr;
};

struct array {
    int mArray[10];
    aproxy operator[](int i) {
        return aproxy(mArray[i]);
    }
};

int main() {
    try {
        array a;
        a[0] = 1;   // ok
        a[0] = 42;  // throws exception
    }
    catch (const char * e) {
        cout << e << endl;
    }
}

Прокси-класс теперь проверяет двоичную цифру, и мы выполняем оператор массива [] возвращает экземпляр прокси, который имеет ограниченный доступ к внутренним компонентам массива.

Вот пример - предположим, у нас есть класс массива, который мы хотим содержать только двоичные цифры (1 или 0). Вот первая попытка:

struct array1 {
    int mArray[10];
    int & operator[](int i) {
      /// what to put here
    }
}; `

Мы хотим, чтобы оператор [] выдавал, если мы говорим что-то вроде a [1] = 42 , но это невозможно, потому что только этот оператор видит индекс массива, а не сохраняемое значение.

Мы можем решить эту проблему с помощью прокси:

#include <iostream>
using namespace std;

struct aproxy {
    aproxy(int& r) : mPtr(&r) {}
    void operator = (int n) {
        if (n > 1 || n < 0) {
            throw "not binary digit";
        }
        *mPtr = n;
    }
    int * mPtr;
};

struct array {
    int mArray[10];
    aproxy operator[](int i) {
        return aproxy(mArray[i]);
    }
};

int main() {
    try {
        array a;
        a[0] = 1;   // ok
        a[0] = 42;  // throws exception
    }
    catch (const char * e) {
        cout << e << endl;
    }
}

Прокси-класс теперь проверяет двоичную цифру, и мы выполняем оператор массива [] возвращает экземпляр прокси, который имеет ограниченный доступ к внутренним компонентам массива.

Вот пример - предположим, у нас есть класс массива, который мы хотим содержать только двоичные цифры (1 или 0). Вот первая попытка:

struct array1 {
    int mArray[10];
    int & operator[](int i) {
      /// what to put here
    }
}; `

Мы хотим, чтобы оператор [] выдавал, если мы говорим что-то вроде a [1] = 42 , но это невозможно, потому что только этот оператор видит индекс массива, а не сохраняемое значение.

Мы можем решить эту проблему с помощью прокси:

#include <iostream>
using namespace std;

struct aproxy {
    aproxy(int& r) : mPtr(&r) {}
    void operator = (int n) {
        if (n > 1 || n < 0) {
            throw "not binary digit";
        }
        *mPtr = n;
    }
    int * mPtr;
};

struct array {
    int mArray[10];
    aproxy operator[](int i) {
        return aproxy(mArray[i]);
    }
};

int main() {
    try {
        array a;
        a[0] = 1;   // ok
        a[0] = 42;  // throws exception
    }
    catch (const char * e) {
        cout << e << endl;
    }
}

Прокси-класс теперь проверяет двоичную цифру, и мы выполняем оператор массива [] возвращает экземпляр прокси, который имеет ограниченный доступ к внутренним компонентам массива.

73
ответ дан 26 November 2019 в 23:37
поделиться

Прокси-класс позволяет вам скрыть личные данные класса от клиентов этого класса.

Предоставление клиентам вашего класса прокси-класса, который знает только общедоступный интерфейс вашего класса, позволяет клиентам использовать службы вашего класса, не предоставляя клиенту доступа к деталям реализации вашего класса.

4
ответ дан 26 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: