From agv@elo.utfsm.cl Tue Oct 23 14:11:23 2001 Received: (from majordom@localhost) by mateo.elo.utfsm.cl (8.9.3/8.9.3) id NAA03599 for lista_elo326-list; Tue, 23 Oct 2001 13:11:41 -0300 (CDT) X-Authentication-Warning: mateo.elo.utfsm.cl: majordom set sender to owner-lista_elo326@mateo.elo.utfsm.cl using -f Received: from agv2001 (agustin@agv2001.elo.utfsm.cl [200.1.17.73]) by mateo.elo.utfsm.cl (8.9.3/8.9.3) with SMTP id NAA03594 for ; Tue, 23 Oct 2001 13:11:39 -0300 (CDT) From: =?iso-8859-1?q?Agust=EDn=20J=2E=20Gonz=E1lez?= Reply-To: agv@elo.utfsm.cl Organization: Universidad =?iso-8859-1?q?T=3Fnica=20Federico=20Santa?= =?iso-8859-1?q?Mar=3F?= To: lista_elo326@elo.utfsm.cl Subject: Sobre acceso a variables protected Date: Tue, 23 Oct 2001 14:11:23 -0300 X-Mailer: KMail [version 1.2] MIME-Version: 1.0 Message-Id: <0110231411230D.00448@agv2001> Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mateo.elo.utfsm.cl id NAA03595 Sender: owner-lista_elo326@elo.utfsm.cl Precedence: bulk Content-Type: text/plain; charset="iso-8859-1" Content-Length: 1277 Status: R X-Status: N ACCESO A MINEBROS PRIOTECTED Los miembros protected de una clase son accesibles para las operaciones de las clases derivadas. Como una medida de seguridad los métodos sólo pueden acceder a variables protected de objetos de su misma clase. Esta condición explica los problemas que tuvo Jaime y Christian. Veamos un ejemplo: class Set { ...... protected: int size; }; class TreeSet: public Set { ..... private: .... void copyMembers(Set& into) const; }; void TreeSet::copyMembers(Set& into) const { into.size=0; // PROBLEMA PORQUE NO TENEMOS ACCESO A INTO.SIZE ..... } En este ejemplo, no tenemos acceso a into.size ya que es un miembro privado de otra clase (Set). Durante la ejecución, pordria tratarse de un objeto ArraySet (que es otra clase derivada de Set ). El lenguaje niega el acceso por no tratarse de un objeto de la misma clase. En contraste no hay problemas en: void TreeSet::copyMembers(Set& into) const { int original = size; ..... } OK porque estamos accediendo al size del mismo objeto (luego de la misma clase TreeSet). Tampoco hay problemas en TreeSet::TreeSet(const TreeSet& s) { size =s.size; root=0; s.copyMembers(*this); } Porque estamos accediendo al campo protegido de s que tambien es TreeSet. Agustín