Есть класс:
class A
{
private:
int i;
};
Нужно вне класса присвоить i некоторое значение с помощью прокси-класса. Как это можно реализовать?
Есть класс:
class A
{
private:
int i;
};
Нужно вне класса присвоить i некоторое значение с помощью прокси-класса. Как это можно реализовать?
Ну, может и не в тему прокси, но как вариант "наследование": =)
class A
{
private:
int i;
protected:
void set_val(int x)
{ i = x; }
public:
int get_val(void) const
{ return (i); }
};
class B : public A
{
public:
B()
{ A::set_val(0); }
void set_value(int x)
{ set_val(x); }
int get_value(void) const
{ return get_val(); }
};
void func(void)
{
B b;
int xx = 777, yy = 0;
b.set_value(xx);
yy = b.get_value();
}
Как-то так, примерно:
class ProxyA;
class A
{
public:
A() : i(0) {}
int i() { return i; }
private:
int i;
friend class ProxyA;
};
class ProxyA
{
public:
static void set(A* a, int i)
{
a->i = i;
}
};
// использование:
A obj;
std::cout << "before: " << obj.i() << std::endl; // вывод: 0
// obj.i = 1; - если раскомментировать, здесь будет ошибка при компиляции
ProxyA::set(&obj, 1);
std::cout << "after: " << obj.i() << std::endl; // вывод: 1
A в ответе отличается от класса A в вопросе (наличием строчки friend class ProxyA;, которая в корне меняет дело).
– avp
Nov 09 '15 at 12:00
friend class - грубый хак. Но в данном вопросе считаю, что не нужно подходить с таким формализмом. Совершенно очевидно, что вопрос - студенческая задача, где преподаватель просит, чтобы студенты проявили немного более знаний, чем он им дал, а не разрешали неразрешимое. Также совершенно очевидно, что студенты должны сами решать такие задачи и задавать вопросы "почему мой код не работает/работает не так?", а не просить готового решения.
– aleks.andr
Nov 10 '15 at 05:24