You are on page 1of 35

Programacin Orientada a Objetos.

Unidad Il. Herencia.

Mapa de contenidos

UnidadII
Herencia

Sobrecargade Herencia Herenciamltiple Funcionesamigas


operadores

Operador Controlde
sobrecargado accesoalos
atributosdelas
clases

1. Sobrecarga de operadores.

Introduccin:

Un operador es un smbolo que le indica al compilador la realizacin de una determinada


operacin sobre variables u objetos, existen diferentes operaciones que pueden realizarse
con un mismo operador, por ejemplo el operador de asignacin (=) puede asignar el
contenido de una variable de tipo int y tambin el contenido de una variable de tipo float.

El Lenguaje de programacin C++ suministra una herramienta que permite al programador


dotar a un operador estndar de la capacidad de realizar diferentes operaciones sobre
variables u objetos, esta herramienta se conoce con el nombre de sobrecarga de
operadores.

1.1 Operador sobrecargado.

El trmino operador sobrecargado se refiere a un operador que es capaz de desarrollar su


funcin en diferentes contextos (situaciones) sin necesidad de programar otras operaciones
adicionales.

Cuando se sobrecarga a un operador, dicha accin, le provee la facilidad o habilidad de


asociarlo a una funcin, con la finalidad de llamar a dicha funcin cuando el compilador
detecte automticamente al operador en un contexto especfico, se dice entonces que el
operador est sobrecargado, porque son ms los objetos sobre los que puede operar.

Para sobrecargar un operador es necesario realizar lo siguiente:


Decllarar y definir una funcin, la cua
al estar v inculada a un operador estnda
ar, con
el fin
n de ampliar el conjuunto de objjetos sobree los que p pueda operrar en conttextos
diferrentes.

La sintaxis para decla


arar y defin
nir una funcin que est vincula
ada a un op
perador esttndar
es la siguie
ente:

Explicacin
n:

T
Tipo: Es el
e tipo de datos
d que devolver la funcin al terminaar su ejecuucin, pued
de ser
cualquiera de los tipo os o derivados o en e
os primitivo el caso en que la fun
ncin no de
ebiera
d
devolver ningn valor se escribe la palabra reservada void

o
operator: Es
E una palabra reserva
ada cuya tra
aduccin a l espaol e
es operado
or.

<Operadorr a sobreca argar> () : Es el operador que se desea sobrecarga ar, se escrribe el


ssmbolo y junto a l loos parntessis de aperttura y cierrre, (no se e
escriben loss smbolos < y >,
en este cas
so solo se utilizaron para
p ejemplificar), el o perador a ssobrecargaar forma parte de
el nombre de la funci n, por ejem
mplo si se desea sobrrecargar al operador d de asignaciin se
ddebe de esscribir lo sig
guiente:

IT: se requiere inserta


ar la siguien
nte imagen::

Nota: En la imagen n del cdig


go fuente a nterior no sse escribi el tipo de datos
que regresara la funcin llam mada opera ator=() porq
que nicam mente ejem mplifica
la forma
a de escribirr el nombre
e de la funccin.

{ (Llave dee apertura)


La llave de apertura indica el inicio de las lneas de c
digo que p
pertenecen a la funci
n que
ssobrecargaa al operadoor (funcin vinculada al
a operadorr).
} (Llave de cierre)

La llave de cierre indica el final de las lneas de cdigo que pertenecen a la funcin que
sobrecarga al operador. Observa que esta llave de cierre no termina con el operador punto
y coma (;).

Ya que se te mostraron los elementos bsicos para declarar y definir una funcin que est
vinculada a un operador estndar, se te indican cuales son los operadores que permite
sobrecargar el Lenguaje de programacin C++:

+ - * / % ^ &
| ! = < > += -=
*= /= %= ^= &= |= <<
>> >>= <<= == != <= >=
&& || ++ -- ->* , ->
[] () new new[] delete delete[] ~

Los siguientes operadores:

Operadores Nombre
:: Resolucin de mbito
. Seleccin de un miembro
.* seleccin de un miembro referenciado por
un puntero
sizeof() tamao de
typeft sinnimo de un tipo

no pueden ser sobrecargados, simplemente por la operacin que desarrollan. Es decir, no


existe otro contexto en el que puedan operar.

Tampoco es posible definir nuevos smbolos como operadores; por ejemplo ** para la
potenciacin, as mismo, no se puede redefinir el nmero de operandos de un operador.

Un ejemplo de la utilidad de la sobrecarga de operadores es el siguiente: se pueden utilizar


para definir operaciones matemticas con elementos tales como nmeros complejos,
vectores y matrices. As, sobrecargando adecuadamente los operadores suma (+) y
asignacin (=), se puede llegar a sumar dos matrices (arreglos) con una sentencia tan
simple como la siguiente: C = A + B;

Otro ejemplo muy utilizado, es sobrecargar los operadores de insercin y extraccin en los
flujos de entrada y salida (<< y >> respectivamente), de manera que estos operadores
puedan imp primir o lee
er estructurras o clases
s con una ssentencia e
estndar co
omo la sigu
uiente:
cout << a[];

Para ponerr en prctic


ca lo explicado hasta este momeento, se pre
esenta el ssiguiente eje
emplo
el cual se va
v a resolve
er por medio de la sob
brecarga de
e operadorees.

Problema:

Para realizar un trabaajo escolar de matem


ticas se ne
ecesita sum
mar los nm
meros comp
plejos:
(10.25, 6) y (3.25, 7) por
p medio del
d operadoor suma (+)).

Nota: Reecuerda que e este operador es ca


apaz de suumar nme eros enteross (por
ejemplo: 5 + 3), ta ambin nmmeros realees (por eje
emplo: 10.2
25 + 4.655 5), as
como nmeros ente eros con n
meros reales (por eje
emplo: 0 + 1.25). Esto
os son
tres conte
extos difere
entes.

Las lneas de cdigo necesarias s para sobrecargar a l operador de suma ((+) y con e ello se
puedan su umar nmeros comple ejos se pres
sentan a co
ontinuacin
n (no olvides ir realizan
ndo el
programa a la par de tu explicacin):

Explicacin
n:

A
Antes de declarar
d y definir
d la funcin que sobrecargu
ue al opera
ador suma (+) es nece esario
d
declarar un
na estructuura de dato os, para es
ste ejemplo
o se decla
ar una estructura lla
amada
complejos, de esta forrma:

A esta es structura se s le dec clararon doos miembbros de tip po float llamados r e i


respectivammente, fue necesario declarar a estos dos miembros de tipo floa at para que
e sean
capaces de e almacena ar nmeros con una parte
p decim al, estos d
dos miembrros almaceenarn
la parte rea
al y la parte
e imaginaria
a de los nm
meros com plejos que se sumaran.

Enseguida se realiz la declarac


cin y definiicin de la funcin que sobrecarrgara al ope
erador
ssuma (+), de
d la siguiente forma:

El tipo de datos
d que devolver
d esta funcin
n cuando fin
nalice su ejecucin ess del tipo lla
amado
complejos, recuerda que al momento de declarar un na estructuura de datoos se gene era un
nuevo tipo de datos. El nombre de esta fun ncin es op
perator+ ( ) y se lee: opereitor m ms. A
esta funcin se le decclararon dos
s argumenttos llamadoos a y b, am
mbos son de e tipo comp plejos,
por lo tanto
o, cada uno o de estoss argumenttos son cappaces de a almacenar lla parte rea al y la
parte imag ginaria de un nmero complejo o. De esta a forma no o se alteraa el nmero de
o
operandos que posee e el operado
or suma (+)).

Despus del
d parntes sis de cierrre ) donde se decla
araron los a
argumentoss, se encue entran
escritas las
s siguientes lneas dee cdigo, mismas
m quee define el trabajo qu
ue realizara
a esta
ffuncin:

Lo primeroo que se reealizo es la declaracin de un objeto llamaado temp dde tipo com
mplejo,
este objeto
o puede alm
macenar la parte real y la parte immaginaria d
de un nume ero comple
ejo, en
esta mismaa lnea de cdigo
c se re
ealiz la as
signacin de
e la suma d
de dos nm
meros comp plejos,
esta inform
macin se pasar au utomticam mente com o argumen nto cuando o el comppilador
d
detecte al operador de suma (+), ( lo quee har estaa lnea de cdigo ess almacenaar dos
nmeros co omplejos con
c su parte e real e imaginaria, uno en el aargumento llamado a y otro
en el argum
mento llamaado b.

En la mism
ma lnea de cdigo se realiza
r la su
uma de los nmeros ccomplejos:


Como pued des observar primero se suma la a parte real del argumento llamad do a con la
a parte
real del arg
gumento lla amado b, y separado o por el op erador com ma (,) se rrealiza la m misma
o
operacin pero
p con laa parte imagginaria de cada
c uno d de los dos aargumentoss, es decir a y b.
(Es necesaario escribirr esta opera
acin entre llaves de ccierre y ape
ertura ({ y }))).

El resultado de esta operacin


o se
s almacen na dentro d mp declarado de
del objeto llamado tem
ttipo compleejo. Cuando finalice la ejecucin n de la funncin, sta regresara el contenid
do del
oobjeto llam
mado temp de tipo com mplejo, el cual
c almaccena tanto la parte reaal como la parte
imaginaria de la suma a, esto es posible gra acias a quee la funcin
n operator+
+() se decla
ar de
ttipo compleejos y al final se le esc
cribi la siguiente instrruccin:


Esta lnea de cdigo indica al compilador
c que cuanddo finalice la ejecuci
n de la fu
uncin
d
debe regresar el conte
endido del objeto llamado temp.

Para imple
ementar toodo lo ante eriormente explicadoo dentro de la funcin principa
al del
programa se
s escribierron las sigu
uientes lnea
as de cdig
go (remarca
adas con ro
ojo):


Como pue edes obserrvar se declararon trres objetoss llamados x, y, z, los tres de
e tipo
complejo.

A
Al objeto lllamado x se
s le asign no el nume ero complejjo 10, 32 ppor medio del operad dor de
asignacin (es necesaario escribirr esta digna
acin entre llaves de a
apertura y ccierre { }).
A
Al objeto llamado y se e le asigno
o el numeroo complejo 21, 12 y a al objeto llamado z no
o se le
asigno ninggn valor, pero ste servir
s para
a almacena ar el resulta
ado de la ssuma de lo
os dos
nmeros co omplejos allmacenado os en los ob
bjetos x e y respectivamente.

La siguientte lnea de cdigo


c realiza la suma
a de dos nmeros commplejos, es en esta ln
nea en
d v reflejado todo el trabajo desarrrollado hastta el mome
donde se ve ento:

Esta lneaa de cdiggo har que


q el com
mpilador p
pase comoo argumen ntos los vaalores
almacenaddos en x e y a los arrgumentos llamados a y b de lla funcin operator+(). Los
vvalores que
e se almace
enen x e y deben de ser
s nmeross complejos.

Puedes obbservar quee es una lnea de c digo senccilla, pero m


muy importtante, ya qque el
o
operador suma (+) esst preparad
do para acttuar sobre ms objetoos, en un co
ontexto adicional
a los que trabajaba de forma estndar, esto es, e el operadorr suma (+)) puede ssumar!
nmeros coomplejos.

El resultado
o de esta suma
s se alm
macena en el objeto lla
amado z.

Para corrobborar que se


s realiz correctame
c nte la suma
a de estos dos nmerros comple ejos a
ttravs del operador
o su
uma (+) es convenien nte mostrar el contenid
do del objeto z en la salida
estndar dee la computadora (la pantalla).
p

Para realizar esta ope


eracin se escribieron
e las siguien
ntes lneas d
de cdigo:

Cuando ten ngas listo tu


u programa a y lo pruebbes podrs vverificar qu
ueel objeto cout y su
o
operador de insercin n se encargan de mosttrar en la pa antalla de la computad dora la cad
dena
d
de caracterres siguientte: El resulttado de la suma
s es: ad
dems de el valor que almacena a el
o
objeto z, es
ste valor se
e mostr po or separado o, primero laa parte reall de z, de e
esta forma: cout
<< z.r y des
spus la pa arte imagina aria, tambi
n de z, de esta forma a: cout << zz.i ya que el
o
objeto coutt y su operaador de inseercin no estn
e sobreccargados p para operarr con nmeros
complejos.
El resultado
o de editar,, depurar y compilar el cdigo fue
ente comple
eto es el siguiente:
A
Actividad de
d aprendizaje 5. Sob
brecarga de
e operadore
es

AAhora que e conoces la forma en que el e Lenguaje e de prog gramacin C++ perm mite al
programador asociar una funci n a un op perador esttndar, parra sobrecarrgarlo, realliza la
ssiguiente actividad,
a la
a cual tiene
e por objetiv
vo que con
nstruyas sooftware esccrito en Lennguaje
C++ capaz z de realizar operacio ones aritmticas con nmeros complejos,, a travs de la
ssobrecargaa de los opeeradores arritmticos

Instrucciones:

1. Retooma el cdigo fuente del program ma que acaabas de revvisar y aaade las lne eas de
cdigo necesarias para declarar y definir tre es funciones ms, es decir, el ccdigo
fuennte debe tener declara adas y definidas cuat ro funcione
es, cada un na de ellas debe
estaar asociada a un opera ador aritm
tico estnddar: suma (+), resta ((-), multipliccacin
(*) y divisin (/)),
2. Los operandos s de cada uno
u de los operadores
o s se debern introducir por med dio del
ado de la co
tecla omputadoraa.
3. Debes enviar tu archivo hasta
h que haya
h sido co
ompilado, ees decir que Dev C++ + no te
haya a marcado error, de lo contrario o no se toomar esta a actividad como vlid da. El
archhivo que de ebes subir a la platafo
orma es el ccdigo fuennte, es deccir el archivvo con
exteensin .c quue se realiz
.

Cuando tenngas listo tu


t archivo gurdalo
g en tu PC y envalo con tus datoss en el sigu
uiente
fformato: ap
pellidopaterrno_matern
no_nombre_ _actividadn
numero

Esta activid
dad tiene un valor de 2 puntos

Conclusin
n:

Un operado or es un smbolo quee le indica al


a compilad dor la realizzacin de u
una determ
minada
ooperacin sobre varia ables u objetos.
o Cuuando un o operador e es capaz de desarrollar su
ffuncin en varios con ntextos (sittuaciones) diferentes sin necesidad de ottras operacciones
adicionales
s, se dice que este opeerador est sobrecarggado.

Muy bie
en, el prime
er tema lo h
has terminado!
Sigue
e adelante!!
Prog
gramacin Orientada
O a Objetos.
Unidad Il. Herenciia.

2
2. Herencia
a.

Introduccin
n.

Las carac ctersticas fundamenttales de la Progra amacin O Orientada a Objetoss son


abstraccinn, encapsulamiento y polimorfismo, aunqu ue todas esstas son m muy importa
antes,
hay una qu ue destaca a de las dems: la he
erencia, que e provee u un mecanissmo muy ssimple
para espec cificar una forma
f de acceso
a alterrnativa a u na clase exxistente, ta
ambin se p
puede
utilizar parra definir una nuevaa clase qu ue aada nuevas ca aractersticaas a una clase
existente.

La herencia permite al program mador crearr una clase


e, modifica
ando una o ms classes ya
existentes, estas moodificacione
es generalm
mente conssisten en aadir nueevos atribu
utos y
mtodos a la clase que se est creando (dderivando),, aunque ta
ambin se pueden reddefinir
atributos o miembros ya existenttes.

Cabe mencionar que e a la clasee existentee, es decir,, la que yaa fue decla arada y de efinida
previamentte se le llama clase base
b y a la nueva
n clasee se le den
nomina classe derivada a, sta
a su vez puede
p ser clase
c base en un nue evo proceso o de heren ncia, los nuuevos atribuutos y
mtodos qu ue se le de
eclaren a unna clase deerivada ade ems de de escribir las caracterstticas y
comportammiento de loos objetos creados
c a partir
p de estta clase de objetos, vaan a diferen
nciarla
d
de su clase
e base.

En el proceso de la herencia en el Lengu uaje de proogramacin n C++ las cclases derivvadas


heredan todos los atributos y mtodos de su classe base, exxcepto el cconstructor de la
clase basee; por lo tanto la clase derivada ser capa az de crea ar objetos con las mismas
caracterstiicas y comp
portamientoo que un ob
bjeto creadoo a partir dee la clase b
base.

Pregunta para
p reflexio
onar:

Creees que es
s necesario
o utilizar ell proceso d
de herencia
a para crear una clase de
objetos que haga exactaamente lo mismo qu ue una cla
ase que ya a fue decllarada
prev
viamente? Respuesta
R

El mecanismo de herencia prresenta m ltiples ven


ntajas que e son eviddentes, com mo la
posibilidad de reutiliza
ar un cdigo sin tenerr que escrib birlo de nue
evo. Esto es posible p
porque
ttodas las clases derivadas puede en utilizar el
e cdigo dee su clase base sin te
ener que voolver a
escribirlo en cada una a de ellas, ms
m adelan nte se te mo
ostrar un e
ejemplo de esto.

A continuacin se mu uestra la sintaxis neceesaria para


a aplicar el mecanismo de heren
ncia, y
con esto de
erivar una nueva
n clase
e a partir de
e una clase
e de objetoss ya existen
nte:
Explicacin
n:

class: Es una
u palabra a reservada
a, cuyo sign
nificado es cclase, sirve
e para indiccar al comp
pilador
que se est
declarand
do una clas
se de objeto
os.

Nombre_c_
_derivada: Es el nomb
bre de la cla
ase derivad
da.

: Este opeerador indic


ca al compilador que se est de
eclarando u
una clase d
derivada de una
bjetos existente.
clase de ob

public: Es un modifica ador, cuyo significado es pblicoo, sirve para


a indicar all compilado
or que
los atributo
os de la clas
se derivadaa se hered
daran tal y como fuero on declaraddos, es deccir, los
atributos deeclarados pblicos
p (public) en la
a clase basse, se hereedarn en la a clase derrivada
como pblicos.

Nota: los atributos


a de
eclarados protegidos (protected)
( en la clasee base, se heredaran en la
clase deriv
vada como protegidos arados privvados (privvate) en la clase
s y los atributos decla
base, se heeredaran enn la clase derivada
d como privadoos.
protected, public y prvate
p son
n herramieentas que e permiten el acceso o o proteg gen el
contenido que guard dan los atrributos de una clase e de objetoos, para eevitar la co opia o
n indebida
modificaci a de informacin. Lo referente
r a los modificcadores pu ublic, proteccted y
prvate se aclarar
a m
s adelante e.

Nombre_c_ _base: Es el nombre


e de la cla
ase base. Recuerda que esta fue declara
ada y
d
definida pre
eviamente.

{ (Llave de
e apertura)
La llave de
e apertura indica el inicio de las lneas de
e cdigo qu
ue pertenecen a una clase
d
derivada de
e objetos.

}}; (Llave de
e cierre)

La llave de
e cierre indica el finaal de las lneas de cdigo que perteneccen a una clase
d
derivada de
e objetos. Esta
E llave de
d cierre sie
empre term
mina con el operador p
punto y com
ma (;).

AAhora que se te mostraron y ex xplicaron los elemento os bsicos para declaarar y definir una
clase deriv
vada de obbjetos se tee presenta otro ejemp plo de estoo, se prete
ende derivaar una
nueva casee de objeto
os a parir de
e una clasee base de o objetos llam
mada CCue enta, para lo
o cual
sse retomar el cdigo fuente rea
alizado en laa actividad de aprendiizaje 3 .

Nota: Para
P dar no
ombre a las clases derrivadas se d uir las siguientes
deben segu
reglas:
Se pueden utilizar casi todas las letras del alfabeto, excepto la .
Se pueden utilizar los nmeros del 0 al 9.
No se pueden utilizar caracteres especiales (puntos, comas, signos de admiracin o
de interrogacin, etc.,) el nico carcter que es aceptado es el guin bajo ( _ ).
El nombre de una clase derivada se puede formar con nmeros y letras pero no se
puede iniciar con un nmero.
No se pueden utilizar como nombres de clases derivadas las palabras reservadas
que usa el compilador, por ejemplo: for, main, do, while, etc.
El Lenguaje C++ distingue entre maysculas y minsculas. Por lo tanto: nombre,
Nombre y NOMBRE, son tres nombres de clases derivadas distintas.
Los nombres de las clases derivadas deben ser cadenas de caracteres, es decir, un
carcter despus de otro sin espacios entre ellos.

La clase derivada deber llamarse CCuenta_joven, y nicamente se le declarar un


atributo de tipo short llamado edad, lo cual tiene por objeto que este atributo almacene la
edad del cuentahabiente, este atributo se declarara de tipo privado, por lo anterior se
debern declarar dos mtodos; uno llamado Asignar_edad mismo que se encargar de
asignar la edad del cuentahabiente en el atributo llamado edad de tipo short que fue
declarado privado, el otro mtodo deber llamarse Obtener_edad, mismo que se encargara
de mostrar en pantalla la edad del cuentahabiente.

Recuerda que estos dos mtodos debers declararlos y definirlos dentro de la llave de
apertura y de cierre de la clase de objetos derivada ({ y };)

Enseguida se muestra el cdigo fuente del programa llamado CCuenta, ste contiene la
declaracin y definicin de la clase de objetos llamada CCuenta, a partir de esta clase
base se realizar la clase derivada que se te va a presentar como ejemplo, este cdigo
fuente puede ser igual o similar al que realizaste para la actividad de aprendizaje 3,
Analzalo y si no pudiste realizar la actividad, edtalo y complalo.

Da clic en el siguiente vnculo para que se despliegue el programa:

Archivo 3

Ya que hayas analizado, editado, depurado y compilado el programa CCuenta, contina


leyendo el ejemplo de la clase derivada, a continuacin se muestran las lneas de cdigo
del mismo remarcado con rojo:
Explicacin
n:

Despus de d la llave de cierre de la declaracin y definicin de la classe base llaamada


CCuenta , que en es ste ejemplo
o en la cla
ase base, sse realizo la declaraccin de la clase
derivada lla
amada CCu uenta_joven
n por medio
o de la sigu a de cdigo:
uiente lnea

class CCue
enta_joven : public CC
Cuenta

Recuerda que
q para declarar una a clase de objetos
o se debe de esscribir la pa
alabra rese
ervada
class, enseguida se escribi el nombre e de la cla ase deriva
ada, en esste ejempllo es:
CCuenta_jo oven, commo ya se me enciono el operador
o doos puntos ((:) se encaarga de indiicar al
compiladorr que se est deriv vando una clase de objetos, enseguida se escrib bi el
modificador public (ppublico) missmo que indica al ccompilador que todoss los atribu utos y
m
mtodos que hereda la clas se llamadaa CCuenta_ _joven se heredan tal y com mo se
d
declararon en la clase
e base llamada CCuen nta.
Nota: La clase derivada CCue enta_joven
n hereda de su classe base lla
amada
CCuenta los siguientes atributo
os que son privados (p
private):
Noombre del cuentahabie
c ente.
Nmero de cu uenta.
Tip
po de inter
s
Sa
aldo

Del mismmo modo CCuenta_jo


C oven here
eda los sig
guientes m
mtodos que son
pblicos (public):

Asign
nar el nomb bre del cuen ntahabiente
e.
Obtener el nombre del cue entahabientte.
Asign
nar el nme ero de cuen nta.
Obtener el nme ero de cuen nta.
Asign
nar el tipo de
d inters.
Obtener el tipo ded inters.
Realiizar un ingrreso de efectivo.
Realiizar un retirro de efectiv
vo.
Obtener el saldo o de la cuenta.

Enseguida y dentro de las llavves de ape ertura y dee cierre ({ y }) de la


a clase derrivada
CCuenta_jo
oven se escribieron la
as lneas de
e cdigo sig
guientes:

private:

El modifica
ador prvate e indica al compiladorr que los a
atributos qu
ue se decla
aren despus de
esta lnea de cdigo sern de tipo privados. En estte ejemplo nicamentte se decla ar un
atributo de tipo short llamado Edad, de estaa forma:

sshort Edad;
public:

El modifica
ador public indica al compilador
c que los mmtodos quue se decla
aren despus de
esta lnea de
d cdigo sern
s de tip
po pblicos. En este e
ejemplo se d
declararon tres mtod
dos, el
ssiguiente es el primero
o:

CCuenta_jo oven ()
{ Edad = 0;; }

Este es el constructor de la clas


se derivada
a llamada C
CCuenta_jo
oven, el cu
ual va a inicciar el
atributo llam
mado edad con valor cero.
c

Recuerda que
q los con
nstructores no se here
edan, en se
eguida se te
e explica e
el por qu ccon un
ejemplo:
Si la clase
e derivada heredara el constructor de su clase basse, que en el caso de e este
ejemplo es s CCuenta() este con nstructor no podra indicar al n buto de la clase
nuevo atrib
d
derivada CCuenta_jov
C do Edad, esto sucede
ven llamad e porque a
al declarar anteriormente el
constructorr llamado CCuenta()
C no exista el atributo
o llamado Edad y ob bviamente no se
escribi nin
nguna lnea
a de cdigo que lo iniciara.

En concluusin, si se
s heredarran los co onstructorees no se podran a agregar nuevos
componenttes a la clase
c deriv
vada, esta es la raz n por la q que al decclarar una clase
d
derivada es
s necesario
o declararle
e y definirle su propio cconstructorr.

Enseguida se declara
aron otros dos mtod
dos (un co nstructor ta
ambin es un mtodo
o), de
esta forma:

vvoid Asigna
ar_edad (sh
hort edad)

{ Edad = edad; }

vvoid Obtener_edad ()

{ cout << "L


La edad es: " << Edad
d << endl; }

El mtodo llamado As signar_eda ad() es de tipo


t void, por lo tanto no regresa ar ningn valor,
posee un argumento
a de tipo sho
ort llamado edad y su trabajo es realizar la asignacin n de la
edad del cuentahabie
c ente en el atributo lla
amado Eda ad, de esta a forma: Ed dad = edad d;. La
informacin
n corresponndiente a la
a edad del cuentahabi
c iente debee provenir d
de una funccin o
programa externo
e a la
a clase derivada de obbjetos.

El mtodo llamado Ob btener_edaad() tambin n es de tipo


o void, por lo que no d
devolver nningn
vvalor, no posee
p ning
n argume ento y su trrabajo conssiste en m mostrar en lla pantalla de la
computado ora el conte
enido del atrributo llama
ado Edad, eesto lo hacce por medio del objeto
o cout
y su operad dor de insercin.

Finalmentee, se tiene la llave de


e cierre } que
q indica al compila
ador el term
mino de la clase
d
derivada.

Nota:: Necesitas
s saber dife
erenciar cu
uando una clase derivvada reutilizza las
lneas
s de cdigo
o que decla
araron atribu
utos y mto
odos de su clase basee.

Para saberr ms:

Para que la reutilizac


cin de cddigos entre las clasess base y de erivada
pueda serr posible, el Lengu uaje de programaci
p n C++ genera
automtica
amente un arreglo
a (arrray) de atributos y m
todos de laa clase
base, de es
sta forma la
a clase deriivada posee sus propiios atributo
os y sus
propios mtodos, un ejemplo
e el atributo lllamado nombre de la clase
de esto es el siguiente: e
base CCue enta (estudiada en esste tema) y el atributo llamado ta ambin nom mbre de la clase
d
derivada CCuenta_jo
C oven son dos atrib butos (variiables) differentes almacenado os en
d
direcciones
s de memoria distintas
s.

A
Arreglos (a
array) de atrributos y mtodos:

El Lenguajee de progra
amacin C+ ++ provee el e mecanis mo necesa ario para ge
enerar un aarreglo
d
de atributo
os y mtod dos que ha aga ms se encilla la rreutilizacin
n del cdiggo fuente d de las
clases bas se, retom
mando el ejemplo anterior,
a para el atrributo nom mbre se g genera
automticaamente el siguiente arrreglo: nomb bre[2], por lo tanto no ombre[0] ess el atributo
o para
la clase base y nombrre[1] es el atributo
a parra la clase dderivada.

A
Actividad de
d Aprendiz
zaje 6. Herrencia

Y
Ya sabes que
q el Leng guaje de prrogramacin C++ permmite al prog
gramador d
derivar una clase
a partir de otra ya exis
stente, lo que se cono
oce como he
erencia.

Para demo ostrar tus conocimient


c tos se te pide que rrealices la siguiente a actividad, la
a cual
ttiene por objetivo que manipules s los atributo
os que partticularizan a un objeto
o pertenecieente a
una clase derivada,
d a partir de una
u clase de d objetos yya existentte y a travs de la herrencia
ssimple, en un program ma escrito en
e Lenguaje e C++.

Es importa ante mencio onarte que


e esta activ
vidad va a servir commo base p para que pu uedas
realizar las
s siguientes
s que se te
e presenten
n, es decir, si no hace
es esta actiividad no p
podrs
realizar las siguientes.

Instrucciones:

1. Edita el
e cdigo fue
ente del pro
ograma CC
Cuenta qu e acabas d de descarga ar y revisar.
2. Aade las siguien
ntes lneas de
d cdigo dentro
d de la
a funcin prrincipal del programa:

3 Explica detalladamente a travs de comentarios en cada una de las lneas de cdigo el


funcionamiento de las mismas.
4 Depura y compila el cdigo fuente completo (el programa CCuenta con las lneas de
cdigo que se aadieron).
5 Debes enviar tu archivo hasta que haya sido compilado, es decir que Dev C++ no te
haya marcado error, de lo contrario no se tomar esta actividad como vlida. El archivo
que debes subir a la plataforma es el cdigo fuente, es decir el archivo con extensin
.cpp que se realiz.

6 Como una ayuda para ti, se te presenta una pequea explicacin de las lneas de
cdigo que vas a aadir. Recuerda que si tienes dudas puedes acudir con tu asesor(a),
el(ella) te apoyar con mucho gusto y aclarar tus dudas.

Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos

Explicacin:

Estas lneas de cdigo declaran dos objetos, uno llamado cuenta01, que pertenece a la
clase de objetos base, es decir a Ccuenta y el otro llamado CUENTA01 que pertenece a la
clase derivada, es decir a CCuenta_joven
Se invoca el mtodo de asignarnombre() por medio del operador punto (.) para ambos
objetos, de igual forma que el mtodo obtenernombre() a la clase llamada CCuenta_joven,
que es la clase derivada,
A la clase derivada no se le declar explcitamente ningn atributo llamado nombre,
tampoco un mtodo para asignar esta informacin ni un mtodo para obtener el nombre del
cuentahabiente, pero los heredo de su clase base, por lo tanto posee todos los atributos y
mtodos de su clase base y adems los que se le declararon explcitamente, es decir, al
atributo Edad y a los mtodos Asinar_edad() y Obtener_edad().

Actividad de aprendizaje 7. Practicando la HeReNcIa

Es momento de seguir demostrando tus conocimientos, realiza la siguiente actividad de


aprendizaje, la cual tiene por objetivo que manipules los atributos que particularizan a un
objeto perteneciente a una clase derivada, a partir de una clase de objetos ya existente, a
travs de la herencia simple, en un programa escrito en Lenguaje C++.

Instrucciones:

1 Edita el cdigo fuente del programa que realizaste en la actividad de aprendizaje 6 y


aade dentro de la funcin principal del programa las lneas de cdigo necesarias para
que se utilicen los once mtodos con que cuenta el objeto llamado CUENTA01 de la
clase de objetos derivada llamada CCuenta_joven.

Los once mtodos mencionados son los siguientes:

1. Asignar el nombre del cuentahabiente


2. Obtener el nombre del cuentahabiente.
3. Asignar el nmero de cuenta.
4. Obtener el nmero de cuenta.
5. Asignar el tipo de inters.
6. Obtener el tipo de inters.
7. Realizar un ingreso de efectivo.
8. Realizar un retiro de efectivo.
9. Obtener el saldo de la cuenta.
10. Asignar la edad del cuentahabiente.
11. Obtener la edad del cuentahabiente.

2 Depura y compila el cdigo fuente completo resultante y explica detalladamente en


cada una de las lneas de cdigo el funcionamiento de las mismas.
3 Debes enviar tu archivo hasta que haya sido compilado, es decir que Dev C++ no te
haya marcado error, de lo contrario no se tomar esta actividad como vlida. El archivo
que debes subir a la plataforma es el cdigo fuente, es decir el archivo con extensin
.cpp que se realiz.

Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos

2.1 Control de acceso a los atributos de las clases.

Una confusin que suele ocurrir al programar en C++ aparece con la herencia, y es el
relacionado con el control del acceso a la informacin, es decir, si se te hiciera la siguiente
pregunta que responderas: crees que el mtodo de una clase derivada pueda acceder a
los atributos privados de su clase base?

La respuesta a esta pregunta es un No rotundo, recuerda que al escribir la palabra


reservada prvate en la declaracin de los atributos de una clase de objetos, se protege a
dichos atributos, por lo tanto ningn mtodo externo a la clase puede leer o alterar el
contenido de los atributos.

Una pregunta ms crees que sea posible declarar y definir nuevos mtodos en una clase
derivada, con el objetivo de modificar los atributos heredados de su clase base?
La respuesta es Si, al escribir la palabra reservada protected en la declaracin de los
atributos de una clase base de objetos, se protege a dichos atributos, por lo tanto ningn
mtodo externo a la clase puede leer o alterar el contenido de los atributos, pero al
d
derivarse una
u clase ded objetos se
s puede declarar un mtodo qu
ue acceda ((lea o modiifique)
a sus atribu
utos hereda
ados.

Para hacerr posible qu


ue un mto odo declarado y definid do dentro dde la llave d
de apertura
a y de
cierre de una clase de objeto os derivad da, acceda a (lea o m modifique) a sus atributos
heredados, es neces sario escribir el mod dificador prrotected q que significca protegid
do, al
mmomento ded declararr y definir la
l clase ba ase, con essto el programador que cre la clase
base protege el trabaajo que reallizara la cla
ase de objeetos de futu
uras modificaciones y si no
sse desea que
q en un fu uturo una clase
c de objjetos deriva
ada acceda a a sus atrib
butos hered
dados
sse debe es
scribir el mo
odificador private
p para protegerloos.

Para ejemp plificar lo explicado,


e a continuac
cin se muuestra un ccdigo fuennte en el que se
retoman lass lneas de cdigo de la clase CC Cuenta_jovven explicad
do anteriorrmente, lelo con
atencin y reflexiona acerca
a de su
s funcionaamiento.

Para ver el cdigo fue


ente da clic en el siguie
ente vnculo
o:

A
Archivo 6.

Y
Ya que hayyas analizado el cdig
go fuente, se te muestrra la image
en del progrrama que re
esulta
d
de compilarlo y enseg
guida se dar su expliccacin:

Explicacin
n:

En el cdigo fuente puedes observar que q se de clar una clase de objetos lla amada
CCuenta, a la que se e le declar nicamennte un atribbuto llamaddo nombre de tipo striing, el
cual almac cenar la in
nformacin referente ala nombre d del cuentahhabiente, o
observa que
e este
atributo fue
e declaradoo de tipo pro
otected, de la siguient e forma:

class CCue
enta

// Atributos

protected: string
s nomb
bre;
Enseguida de la palabra reservada public, se declararon tres mtodos, el primero es el
constructor de la clase de objetos CCuenta, mismo que inicia al atributo nombre con una
cadena de caracteres vaca, este mtodo es el siguiente:

// Mtodos

public:

CCuenta () // CONSTRUCTOR..........

nombre = "";

Enseguida se muestran los otros dos mtodos que se declararon:

void asignarnombre(string nom)

nombre = nom;

string obtenernombre()

return nombre;

Estos son los dos ltimos mtodos de la clase de objetos CCuenta, el mtodo llamado
asignarnombtre() es el encargado de asignar la informacin referente al nombre del
cuentahabiente en el atributo llamado nombre.

El mtodo llamado obtenernombre() es el mtodo encargado de regresar el contenido del


atributo nombre, esto previamente ya se haba explicado.

Enseguida y despus de la llave de cierre con punto y coma de la clase CCuenta se deriv
una clase llamada CCuena_joven, a la cual adems de un atributo llamado Edad y dos
mtodos, uno para asignar la edad y otro para mostrar la edad del cuentahabiente en la
pantalla de la computadora, (esto tambin ya se haba explicado antes) se le declar un
mtodo llamado Modificr_nombre(), a este mtodo no se le declaro ningn argumento,
quedando de la siguiente manera:

void Modificar_nombre ()
{ nombre = "IsRrAeL"; }

El trabajo de este mtodo es acceder y modificar al atributo heredado llamado nombre de


tipo strig, y almacenar la cadena de carcetres IsRrAeL.

Enseguida se muestran las siguientes lneas de cdigo escritas en la funcin principal del
programa, mismas que implementan los mtodos declarados en las clases de objetos:

CCuenta c;
CCuenta_joven C;

Estas dos lneas de cdigo declaran dos objetos, uno es llamado c y el otro es llamado C,
el objeto c pertenece a la clase de objetos CCuenta y el objeto C pertenece a la clase
derivada llamada CCuenta_joven.

A continuacin se encuentra la siguiente lnea de cdigo:

string N;

Esta lnea de cdigo declara una variable llamada N de tipo string, la cual almacenar el
nombre del cuentahabiente, para ambos objetos (c y C). esta informacin es solicitada a
travs de un mensaje en la pantalla de la computadora y recibida por medio de la entrada
estndar (el teclado) y almacenada primero en la variable llamada N y despus pasada
como argumento por medio del mtodo asignarnombre() de ambos objetos , gracias a las
siguientes seis lneas de cdigo:

cout << "Ingresa el primer nombre: ";

cin >>N;

c.asignarnombre(N);

cout << "Ingresa el segundo nombre: ";

cin >>N;

C.asignarnombre(N);

En este momento en el atributo llamado nombre de tipo string de ambos objetos (c y C) se


almacena una cadena de caracteres), con informacin referente al nombre de los
cuentahabientes (lo ms recomendable es que sean nombres diferentes, aunque puede ser
el mismo), para saber qu informacin se almacen en cada uno de los atributos se
implement al mtodo obtenernombre() de cada objeto ( c y C) de esta forma:

cout << "El primer nombre es: " << c.obtenernombre() << endl;

cout << "El segundo nombre es: " << C.obtenernombre() << endl;
Con estas lneas de cdigo
c se mostr
m en pantalla
p el ccontenido d
del atributo llamado noombre
dde tipo strin
ng, (tanto del
d atributo de la clase
e base com mo del atributo de la cllase derivada. El
ssiguiente ser el resulltado del prrograma en
n ejecucin::

Enseguida se muestrra la lnea de cdigo que invocca por med dio del operador pun nto al
mtodo llammado Modificar_nomb erda que esste mtodo fue declara
bre(), recue ado y definiido en
la clase derivada CCu
uenta_joven
n:

C.Modifica
ar_nombre();

Este mtoddo modifica


a el conten
nido del atributo llama
ado nombre
e de tipo string de la clase
d
derivada CCuenta_jovven.

borar que este


Para corrob e mtodo
o realiz co
orrectamentte su trabajjo se invoc nuevame
ente al
mtodo obttenernombrre() en amb
bos objetoss (c y C), de
e esta forma
a:

cout << "E


El primer no
ombre es: " << c.obtenernombre()) << endl;

cout << "E


El segundo nombre es
s: " << C.ob
btenernomb
bre() << end
dl;

El resultado
o de ejecuttar este pro
ograma es el
e siguiente :

Con lo cua
al se corroobora que el nombre e Benjamin
n almacenaado en el atributo lla
amado
nombre del objeto C, fue reempla
azado por el
e nombre d
de IsRrAeL
L.
Conclusiones:

El mecanismo de la herencia permite al programador crear una clase, modificando una o


ms clases ya existentes, estas modificaciones generalmente consisten en aadir nuevos
atributos y mtodos a la clase que se est creando (derivando). La clase de la que se parte
(la que ya fue declarada y definida previamente), recibe el nombre de clase base, y la
nueva clase que se obtiene se denomina clase derivada, est ltima a su vez puede ser
clase base en un nuevo proceso de herencia.
En el proceso de la herencia en el Lenguaje de programacin C++ las clases derivadas
heredan todos los atributos y mtodos de su clase base, excepto el constructor de la
clase base.

Para hacer posible que un mtodo de una clase de objetos derivada, acceda (lea o
modifique) a sus atributos heredados, es necesario escribir el modificador protected (que
significa protegido), al momento de declarar y definir los atributos de la clase base.

Excelente!

Ya falta menos, continua con el siguiente tema


Prog
gramacin Orientada
O a Objetos.
Unidad Il. Herenciia.

Introducci
n.

En ocasionnes el prog gramador posee dos s o ms cllases de o objetos quee evidentem mente
d
declar y defini conn anteriorid
dad, cada una fabriccada con u un propsitto especfico, el
Lenguaje de
d program macin C++ provee al programad dor un meccanismo seencillo y eficciente
para crear una nueva a clase de objetos a partir
p de cla
ases de ob
bjetos ya exxistentes, a este
mecanismo o se le cono
oce con el nombre
n de herencia mmltiple

3. Herencia
a mltiple.

El mecanissmo de la herencia provisto


p por el Lenguaje de pro ogramacin C++ perm mite al
programador crear un na clase, modificando
m o una o m s clases yya existenttes. Hasta ahora
ssolo se haa mostrado el mecanissmo de la herencia
h a partir de unna nica cla ase base, a este
proceso see le conoce
e como hereencia simplle, pero es muy til re
eutilizar el ccdigo fuen
nte de
ddos o ms clases basse ya existe
ente para crear una nuueva clase de objetoss, a este pro oceso
sse le conoc
ce como heerencia mltiple.

encia mltiple es fcil crear una clase de o


Con la here objetos que e rena las caracterstticas y
comportammiento de ottras clases de objetos ya existenttes, un ejem
mplo es el ssiguiente:

Se cuenta con dos clases de ob bjetos prefa


abricadas, una se llamma AUTOM MATICO y la otra
sse llama MANUAL,
M am
mbas clasees de objeto
os poseen un solo atrributo de tip
po short, lla
amado
V y v resp pectivamentte, y cada una posee e un mtod do que defiine el comportamiento que
ttiene una caja
c de velo
ocidades pa
ara automv vil automttico o manu
ual respecttivamente.

A partir de
e estas dos
s clases dee objetos se pretendee derivar un
na nueva cclase de objetos
llamada HIBRIDO,
H la cual debe
d permmitir crear (declarar) objetos hbridos, cuyo
comportam miento pued
da ser el de una caja de
d velocidaddes automtica o man
nual.

A continua
acin se prresenta el cdigo fueente y el p
programa e ejecutable que contie ene la
implementa
acin de las
s dos clase
es de objeto
os mencion adas en el ejemplo, a
analzalos.

Para mosttrarte los archivos mencionado


m os da clicc sobre lo
os vnculoss Archivo 7 y
Ejecutable
e 7(2)

A
Archivo 7

Ejecutable 7(2)

Una vez quue has analizado y refflexionado acerca del funcionammiento del c
digo fuentte y el
programa que
q se te proporcion
p , se muesstra la sinta
axis necesa
aria para ddeclarar y d
definir
una clase de
d objetos a partir de ms
m de una a clase basse:
Explicacin:

class: Es una palabra reservada, cuyo significado es clase, sirve para indicar al compilador
que se est declarando una clase de objetos.

Nombre_c_derivada: Es el nombre de la clase derivada.

: Este operador indica al compilador que se est declarando una clase derivada de una
clase de objetos existente.

public: Es una palabra reservada, cuyo significado es pblico, sirve para indicar al
compilador que los atributos de la clase derivada se heredaran tal y como fueron
declarados, es decir, los atributos declarados pblicos (public) en la clase base, se
heredaran en la clase derivada como pblicos, los atributos declarados protegidos
(protected) en la clase base, se heredaran en la clase derivada como protegidos y los
atributos declarados privados (private) en la clase base, se heredaran en la clase derivada
como privados.

Esta es una herramienta que permite el acceso o protege el contenido que guardan los
atributos de una clase de objetos, para evitar la copia o modificacin indebida de
informacin.

Nombre_c_base1: Es el nombre de la clase base. Recuerda que esta fue declarada y


definida previamente.

El operador coma (,) sirve para separar el nombre de las clases base.

Nombre_c_base_n: Es el nombre de la otra clase base. Recuerda que esta fue declarada
y definida previamente.

Nombre_c_base_n: Es el nombre de la otra clase base, no existe limite en cuanto al


nmero de clases base, nicamente hay que separar los nombres por medio del operador
coma (,) y el modificador correspondiente (por ejemplo public). Recuerda que esta(s)
fue(ron) declarada(s) y definida(s) previamente.

{ (Llave de apertura)

La llave de apertura indica el inicio de las lneas de cdigo que pertenecen a una clase
derivada de objetos.

}; (Llave de cierre)

La llave de cierre indica el final de las lneas de cdigo que pertenecen a una clase
derivada de objetos. Observa que esta llave de cierre siempre termina con el operador
punto y coma (;).
Nota: Paara dar nom
mbre a las clases derrivadas se d
deben segu
uir las siguientes
reglas:

Se
S pueden utilizar
u casi todas las lletras del alfabeto, exccepto la .
Se
S pueden utilizar
u los nmeros
n de
el 0 al 9.
No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiraccin o
de in
nterrogacin, etc.,) el nico carccter que es aceptado e es el guin bajo ( _ ).
El nombre de unau clase derivada
d see puede forrmar con nmeros y le etras pero no se
puedde iniciar co
on un nme ero.
No se
s pueden utilizar com mo nombre es de clasees derivada as las palaabras reservvadas
que usa el com mpilador, poor ejemplo: for, main, d
do, while, etc.
El Lenguaje
L C++
C distinguue entre maysculas
m y minscu ulas. Por lo o tanto: noombre,
Nommbre y NOM MBRE, son tres nombrres de clase es derivada as distintas.
Los nombres de d las clase es derivadas deben se er cadenas de caracte eres, es deccir, un
car
cter despus de otro sin espacio os entre ello
os.

A
Actividad de
d integrado
ora 1. Here
encia MuLtIIpLe

A
Ahora que e conoces la forma en que el e Lenguaje e de prog gramacin C++ perm mite al
programador derivar una clase a partir de una o m ms clases de objeto os ya existe
entes,
realiza la siguiente
s ac
ctividad inte
egradora, la
a cual tiene
e por objetivvo que cree
es una cla
ase de
o
objetos a partir de msm de unna clase dee objetos yya existente, a travss de la herrencia
mltiple, en
n un prograama escrito en Lengua aje C++.

Instrucciones:

1 Editaa el cdigo fuente del programa que realiza


aste en la a
actividad dee aprendiza
aje 7 y
aade las lneas de cdigo o necesariaas para de erivar una clase de objetos lla amada
HIBRIDDO, sus cla ases base sern: la clase de o objetos AUUTOMATICO O y la clase de
objetoss MANUAL, aade tam mbin las lneas de cdigo neceesarias dentro de la fu
uncin
principa
al del proggrama que utilicen los cuatro mmtodos co on que cue enta la classe de
objetoss derivada llamada HIB
BRIDO, loss cuatro mtodos son llos siguienttes:

1.
1 Manual
2.
2 Automttico
3.
3 Encendeer
4.
4 Apagar

2 Depura y comp pila el cdig


go fuente completo
c reesultante y explica de
etalladamen
nte en
cada una de las lneas de cdigo el funcionamientto de las mismas.

3 Debes enviar tu
u archivo hasta
h que haya sido co
ompilado, e es decir que Dev C++ + no te
haya marcado
m errror, de lo co
ontrario no se tomar esta activid
dad como vvlida. El archivo
que debes subir a la plataforma es el cdigo fuente, es decir el archivo con extensin
.cpp que se realiz.

Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos

Conclusin.

El mecanismo de la herencia mltiple provisto por el Lenguaje de programacin C++


permite al programador derivar una clase, modificando una o ms clases ya existentes.
Esto puede ser muy til para reutilizar el cdigo fuente de dos o ms clases base ya
existente.

La clase de objetos derivada que se obtiene en un proceso de herencia mltiple hereda


todos los atributos y mtodos de su(s) clase(s) base, excepto el (los) constructor(es).

Muy bien, solo falta un tema para finalizar!

Prog
gramacin Orientada
O a Objetos.
Unidad Il. Herenciia.

Introducci
n.

Y
Ya se ha menciona ado que lo os atributo
os declarados como privados por medio del
modificador prvate dee una clase
e de objetoss, no son aaccesibles ppara mtod
dos (funcionnes) y
clases exte
ernas a dic cha clase. Pero pued de ser nece esario o coonveniente que un m mtodo
externo a la clase pueeda tener acceso
a priv
vilegiado a los atributo
os de una cclase de ob
bjetos,
an cuanddo estos se e hallan declarados como privvados. El L Lenguaje dde program macin
permite al programador otorga ar este privvilegio (pe rmiso) porr medio dee el mecanismo
llamado am
mistad ( friend).

4
4. Funcione
es amigas.
La amistadd (friend) es un meca anismo que e provee ell Lenguaje de programacin C+ ++ por
medio del cual
c el proggramador puede
p otorg
gar un permmiso o privillegio a un m
mtodo (fun ncin)
que no pertenezca a una clase e de objetoos, con estto el mtod do tendr la capacida ad de
acceder (le
eer y modificar) a los atributos
a dee la clase de
e objetos, a
aun cuando o los atributtos de
la clase dee objetos hayan
h sido
o declarado os como p privados. PPara hacer esto posib ble es
necesario utilizar
u el modificador
m friend.
f

El modifica d inhibe el sistema


ador friend a de proteccin que se obtien ne al escriibir el
modificador prvate ene la declaracin de e los atrib utos de una clase d de objetoss. Las
relaciones de "amistadd" entre cla
ases y mto
odos (funcio
ones) son ssemejantess a las relacciones
d
de amistadd entre pers
sonas, por ejemplo:
e

La amistad
a no puede tran nsferirse, po
or ejemplo si A es am
migo de B, y B es amiigo de
C, esto no impllica que A sea
s amigo de d C.
La amistad
a no puede heredarse. Si A es amigo o de B, y C es una cllase deriva
ada de
B, A no es amiggo de C.
La amistad
a no es simtricca. Si A es amigo de B, no es foorzoso que B sea amiigo de
A.

Las funcionnes amigas s deben dec clararse sittuando su pprototipo de


e funcin (la declaraciin de
la funcin sin la de efinicin) dentro
d de la clase d de la que se preten nde sea a amiga,
precedind dola por laa palabra reservada
r friend.
f Ensseguida see muestra la sintaxiss para
realizar estta declaraciin y posteriormente sus explicaciin:
Explicacin
n:

ffriend: Es una palab bra reserva ada, cuyo significado o es amigo o(a), sirve para indiccar al
compiladorr que la funncin que se s est dec de la clase de objetos en la
clarando ess amiga d
cual se situ
u el prototiipo de dichaa funcin.

ttipo: Es el tipo de datos que devolver


d la
l funcin al termina
ar su ejecuucin, pued
de ser
cualquiera de los tipo
os primitivo
os o derivados o en eel caso en que la fun
ncin no de
ebiera
ddevolver ningn valor se escribe la palabra reservada void

Nombre_de
e_la_funcio
on: Es el no
ombre de la
a funcin.

Nota: Paara dar nom


mbre a las funciones
f a
amigas se d uir las siguientes
deben segu
reglas:

Se
S pueden utilizar
u casi todas las lletras del alfabeto, exccepto la .
Se
S pueden utilizar
u los nmeros
n de
el 0 al 9.
No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiraccin o
de in
nterrogacin, etc.,) el nico carccter que es aceptado e es el guin bajo ( _ ).
El nombre de unau funcin n amiga see puede forrmar con n meros y le etras pero no se
puedde iniciar co
on un nme ero.
No se
s pueden utilizar com mo nombres de una fu uncin amig ga las palaabras reservvadas
que usa el com mpilador, poor ejemplo: for, main, d
do, while, etc.
El Lenguaje
L C++
C distinguue entre maysculas
m y minscu ulas. Por loo tanto: no ombre,
Nommbre y NOM MBRE, son tres nombrres de funciones amig gas distintass.
Los nombres de las funcio ones amigaas deben se er cadenass de caracte eres, es deccir, un
car
cter despus de otro sin espacio os entre ello
os.

Nombre_c_ _amiga: Es s el nombrre de la clase de ob


bjetos de la
a cual se pretende q
que la
ffuncin sea
a amiga.

( ); (Paren
ntesis de ap
perura y Pa
arentesis de cierre)

En medio ded los parn


ntesis de apertura y de cierre de be escribirsse el nombre de la cla
ase de
la que se pretende que
q la func
cin ser amiga.
a Si e
es ms de e una clase e de objetoos los
nombres deben separarse por medio
m del operador
o co
oma(,). Observa que el parntessis de
mpre termina
cierre siem a con el ope
erador punto y coma (;).

Nota: la de
efinicin de la funcin debe realiz
zarse desp
pus de la llave de cie
erre (con pu
unto y
coma };) de
e la clase de objetos.

A
Ahora quee conoces la forma en e que se declara u na funcin n amiga, se e te preseenta a
continuaci
n un cdig
go fuente enn l se enc
cuentra la d
declaracin y definicin
n de una fuuncin
amiga de la
a clase de objetos llam
mada HIBR RIDO, el traabajo de la funcin ammiga es alte
erar el
contenido que almac cena uno ded los atributos de la clase de
erivada llam
mada HIBR
RIDO,
A
Analzalo detalladame
d ente y recue
erda que lo
o debes rea
alizar.

Da clic en el
e siguiente
e vnculo pa
ara que pue
edas ver ell programa::

PDF 10

Explicacin
n:

En el cdig
go fuente que acabas de descarg gar y analizzar, se decllaran dos cclases de objetos
que servir
n de clasess base para
a una clase
e derivada lllamada HIB BRIDO, el nombre de estas
d
dos clasess de objetoos son: AUTTOMATICO O y MANU AL la decclaracin y definicin de la
primera cla
ase es la sig
guiente:
Esta clase de objeto os se llama a CAMBIO_ _MANUAL , posee un n argumen nto de tipo short
llamado v declarado de tipo prrivado. Esta clase de e objetos ccuenta con un constrructor,
mismo que e inicia al atributo
a llam
mado v con n el valor ccero, ademms cuentaa con un mmtodo
llamado CAMBIO_MA
C ANUAL() mismo
m que es de de ttipo void (n
no regresa ningn valo
or) en
este mtoddo se escribbieron las lneas de c
digo que d
definen el comportamie ento de una
a caja
d
de velocida
ades (manu ual) de un automvil.
a

Enseguida se escribi efinicin de la segund


la declarracin y de da clase de e objetos que se
utilizo para derivar a la
a clase llammada HIBRRIDO, su de eclaracin y definicin
n es la siguiente:
Esta clase de objetos se llama AUTOMATIC
A CO, posee un argume o short llamado V
ento de tipo
ddeclarado de tipo privado. Esta a clase de objetos cuuenta con u un construcctor, mismo o que
inicia al attributo llam
mado V con n el valor cero, ademms cuenta a con un mtodo lla amado
CAMBIO_A AUTOMATICO () mism mo que es ded de tipo vvoid (no reg
gresa ningn valor) enn este
mtodo se escribieron n las lneas
s de cdigoo que defin en el comp portamientoo de una ca aja de
vvelocidades (AUTOMA ATICO) de un autom vil.

A continuac
cin se te muestra
m el proceso dee herencia mmltiple aplicado a la clase de objetos
llamada HIBRIDO, es decir la deerivacin de
e la clase n
nombrada a anteriormen nte a partir d
de las
clases de objetos
o llam
madas MAN NUAL y CA AMBIO_AUT TOMATICO O.

Esta clase e de objeto


os derivadaa se llama a HIBRIDO O, posee un argumen nto de tipo
o bool
llamado ESTADO, declarado
d de
d tipo p blico. Esta
a clase de objetos cuenta co on un
constructorr, mismo que inicia al atributo llamado ES STADO con n el valor d
de false, ad
dems
cuenta con n dos mto
odos, el prim
mero es llaamado EN NCENDER()) mismo qu ue es de de tipo
vvoid (no reegresa ning
gn valor) en este mtodo
m se e
escribieronn las lneass de cdigoo que
cambian el contenido o de el atributo llamad do ESTAD DO al reesccribir el valor true en dicho
atributo, de
e acuerdo al
a contenidoo que almacena este a atributo ind
dicara que eel automvil esta
encendido o apagado (true indica a encendido y false in
ndica apaga ado),
Enseguida por medio del objeto cout y su operador
o de
e insercin se muestra a una cadeena de
caracteres por la panntalla de la
a computad dora (RRR)) por un lapso de tiem mpo igual a dos
ssegundos (el
( lapso de tiempo est
e indicad
do en milise
egundos) y posteriorm mente por m medio
ddel objeto cout
c y su operador
o de
e incepcinn se muestrra por panttalla la sigu
uiente cadeena de
caracteres:: MOTOR ENCEDIDO O RRR. Con estos m mensajes e en la panta alla se indica el
estado del automvil en
e una form ma visual.

El siguiente e llamado APAGAR


e mtodo es R() mismo q que es de tiipo void (noo regresa nningn
vvalor) en este
e mtodo
o se escribbieron las lneas de c
digo que ccambian el contenido de el
atributo llamado EST TADO al re eescribir el valor falsee en dicho
o atributo, con lo que e este
atributo ind
dica que el automvil est apag gado, enseg guida por mmedio del objeto coutt y su
ooperador ded insercin
n se muesttra la siguie ente cadenna de caraccteres por la pantalla de la
computado ora: MOTORR APAGAD DO. Con es ste mensaje e en la panttalla se indica el estad
do del
automvil ene una form
ma visual.

Enseguida y antes ded la llave de cierre con


c punto y coma ((};) de la cclase de objetos
llamada HIIBRIDO se e escribi nicamente
e el prototip
po (declara a funcin a
acin) de la amiga
llamada ENNEMIGA (M Ms adelantte cuando se
s te expliqque el traba
ajo que rea
aliza esta fu
uncin
ssabrs el porqu
p de este
e nombree):

Para declarar (escribir) el prototipo de esta funcin es necesario escribir antes del tipo
o de la
ffuncin la palabra resservada frieend esto le
e indicar a
al compilad dor que se est decla arando
una funcin amiga. Esta
E funci
n es de tipo void (n no regresa a ningn vaalor) y entre los
parntesis (en donde se declara an los argumentos) se e le escribi
el nombrre de la cla
ase de
oobjetos de la cual es amiga,
a en este
e ejemplo se escrib
bi el nombre de la cla
ase HIBRID DO.

Despus de la llave de d cierre coon punto y coma de la clase de


e objetos lla
amada HIB
BRIDO
sse escribi la definici
n de la fun
ncin amiga
a llamada E
ENEMIGA(). De este mmodo:
En la definicin de estta funcin ya
y no es neecesario esscribir la palabra reserrvada friend
d, y se
ddebe decla arar como argumento
a a un objeto
o de la classe de objeto os de la cu
ual esta fun
ncin (
ENEMIGA(()) es amig ga, en el caaso de este
e ejemplo se declaro o al objeto llamado R de la
clase de objetos deriv vada llamaada HIBRIDDO, es por medio de este objetto que la fu uncin
amiga acce ede a los atributos
a de
e la clase de
d objetos HIBRIDO, enseguida y por med dio del
oobjeto llammado R (declarado como argume ento) se m modifica el ccontenido qque almaceena el
atributo llam
mado ESTA ADO de la clase de objetos
o llam
mada HIBR RIDO, guard dando en e este el
vvalor de faalse, recuerrda que estte atributo indica el eestado del automvil, y por med dio del
oobjeto coutt y su operrador de ins sercin se muestra la a siguiente cadena de e caracteress, tres
vveces en la a pantalla de
d la compu utadora: Falla intencio nal.

Enseguida dentro de la funcin principal del


d program ma, se decclara un ob
bjeto de la clase
dderivada lllamada HIBRIDO, es ste objeto es llamad do A, postteriormente
e por mediio del
ooperador punto
p se in
nvocan a lo
os mtodos s ENCEND DER(). CAMMBIO_AUT TOMATICO O, a la
ffuncin llam
mada ENEMMIGA(), al mtodo llamado MAN NUAL() y A
APAGAR() rrespectivammente,
mismos que ejecutan las accione
es antes exxplicadas

El siguiente
e ejecutable muestra el resultad
do de editarr, depurar y compilar el cdigo ffuente
completo de
d este pro ograma esc crito en Len
nguaje C+++ da clic en el siguiente vnculo
o para
que se desspliegue el programa:
p

Ejecutable 10.

A
Actividad de
d aprendizaje 8. Funciones am
migas o ene
emigas?

A
Ahora que e conoces la forma en que el e Lenguaje e de prog gramacin C++ perm mite al
programador declararr y definir una funcin amiga de e una classe de objettos ya exisstente,
realiza la siguiente
s ac
ctividad de
e aprendiza
aje, la cual tiene por o
objetivo qu
ue practiquees las
declaracin, definicin e implementacin de una funcin amiga, mecanismo provisto por el
Lenguaje de programacin C++

Instrucciones:

1 Edita el cdigo fuente del programa que acabas de realizar, y aade las lneas de
cdigo necesarias para modificar los tres atributos con los que cuenta la clase de
objetos derivada llamada HIBRIDO, incluyendo a los atributos derivados.

Los atributos con los que cuenta la clase HIBRIDO son los siguientes:

v
V
ESTADO
2 Depura y compila el cdigo fuente completo resultante y explica
detalladamente en cada una de las lneas de cdigo el funcionamiento de las
mismas.
3 Debes enviar tu archivo hasta que haya sido compilado, es decir que Dev
C++ no te haya marcado error, de lo contrario no se tomar esta actividad
como vlida. El archivo que debes subir a la plataforma es el cdigo fuente,
es decir el archivo con extensin .cpp que se realiz.
4 Recuerda que si tienes dudas puedes acudir con tu asesor(a), el(ella) te
apoyar con mucho gusto y aclarar tus dudas.
5 Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el
siguiente formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos

Conclusin.

Un operador es un smbolo, cuando ste es capaz de desarrollar su funcin en varias


situaciones diferentes sin necesidad de otras operaciones adicionales, se dice que este
operador est sobrecargado.

Cuando el programador necesita crear una clase, modificando una o ms clases ya


existentes, este puede hacer uso de la herencia. La clase de la que se parte recibe el
nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada, est
ltima a su vez puede ser clase base en un nuevo proceso de herencia. En el proceso de la
herencia en el Lenguaje de programacin C++ las clases derivadas heredan todos los
atributos y mtodos de su clase base, excepto el constructor de la clase base.

Del mismo modo el mecanismo de la herencia mltiple provisto por el Lenguaje de


programacin C++ permite al programador derivar una clase, modificando una o ms
clases ya existentes
La amistad (friend) es un mecanismo que prob el Lenguaje C++ por medio del cual el
programador puede otorgar un permiso o privilegio a un mtodo (funcin) que no
pertenezca a una clase de objetos, con esto, el mtodo tendr la capacidad de acceder
(leer y modificar) a los atributos de la clase de objetos, aun cuando los atributos de la clase
de objetos hayan sido declarados como privados. Para hacer esto posible es necesario
utilizar el modificador friend.

Muy buen trabajo!

Terminaste la Unidad II

You might also like