Supongamos que tenemos dos clases:¿Cómo hacer que una clase pueda acceder solo a ciertos miembros privados de otra clase?
class Base
{
private:
int x;
public:
void f();
};
class Foo
{
// some variables and methods
};
Ahora todo el mundo puede llamar Base::f()
, pero quiero solamente Foo
para poder hacerlo.
Para lograr este efecto, podemos hacer Base::f()
privada y declarar Foo
como amigo:
class Base
{
private:
int x;
void f();
friend Foo;
};
El problema con este enfoque es que Foo
tiene el acceso tanto a Base::f()
y Base::x
(e incluso a cualquier otro miembro privado de Base
). Pero quiero que Foo
tenga acceso solo al Base::f()
.
¿Hay alguna manera para que una clase (o una función) otorgue acceso solo a ciertos miembros privados de otra clase? O tal vez alguien podría sugerir un mejor enfoque para mi problema?
EDIT:
Voy a tratar de especificar la restricción de acceso que necesito. En primer lugar, Base
es una interfaz en una biblioteca (de hecho, es una clase abstracta). El usuario usa solo las clases derivadas de Base
. Base::f()
se llama solo por Foo
que es otra clase en la biblioteca. Escondido Base::f()
del usuario es importante, porque solo Foo
sabe cuándo llamarlo. Al mismo tiempo, Foo
no debe ensuciar a los demás miembros de Base
.
Usted podría hacer 'f()' protegido y usar herencia protegida, creo. – chris
Pero 'Foo' no se deriva de' Base'. – miloszmaki
Fue solo un pensamiento. Tendrás que derivarlo. Después de ver la respuesta 'BaseData', me gustaría ir con eso, sin embargo. – chris