Está en la página 1de 35

Programación Orientada a Objetos.

Unidad Il. Herencia.

Mapa de contenidos

 Unidad II 
Herencia 

Sobrecarga de  Herencia  Herencia múltiple  Funciones amigas 


operadores 

Operador  Control de 
sobrecargado  acceso a los 
atributos de las 
clases 

1. Sobrecarga de operadores.

Introducción:

Un operador es un símbolo que le indica al compilador la realización de una determinada


operación sobre variables u objetos, existen diferentes operaciones que pueden realizarse
con un mismo operador, por ejemplo el operador de asignación (=) puede asignar el
contenido de una variable de tipo int y también el contenido de una variable de tipo float.

El Lenguaje de programación C++ suministra una herramienta que permite al programador


dotar a un operador estándar 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 término operador sobrecargado se refiere a un operador que es capaz de desarrollar su


función en diferentes contextos (situaciones) sin necesidad de programar otras operaciones
adicionales.

Cuando se sobrecarga a un operador, dicha acción, le provee la facilidad o “habilidad” de


asociarlo a una función, con la finalidad de “llamar” a dicha función cuando el compilador
detecte automáticamente al operador en un contexto específico, se dice entonces que el
operador está sobrecargado, porque son más los objetos sobre los que puede operar.

Para sobrecargar un operador es necesario realizar lo siguiente:


Decllarar y definir una función, la cua
al estará v inculada a un operador estánda
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 función que esté vincula
ada a un op
perador esttándar
es la siguie
ente:

Explicación
n:

T
Tipo: Es el
e tipo de datos
d que devolverá la función al terminaar su ejecuución, pued
de ser
cualquiera de los tipo os o derivados o en e
os primitivo el caso en que la fun
nción no de
ebiera
d
devolver ningún valor se escribe la palabra reservada void

o
operator: Es
E una palabra reserva
ada cuya tra
aducción a l español e
es “operado
or”.

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


ssímbolo y junto a él loos paréntessis de aperttura y cierrre, (no se e
escriben loss símbolos < 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 asignaciión se
ddebe de esscribir lo sig
guiente:

IT: se requiere inserta


ar la siguien
nte imagen::

Nota: En la imagen n del códig


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

{ (Llave dee apertura)


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

La llave de cierre indica el final de las líneas de código que pertenecen a la función 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 básicos para declarar y definir una función que esté
vinculada a un operador estándar, se te indican cuales son los operadores que permite
sobrecargar el Lenguaje de programación C++:

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

Los siguientes operadores:

Operadores Nombre
:: Resolución de ámbito
. Selección de un miembro
.* selección de un miembro referenciado por
un puntero
sizeof() tamaño de
typeft sinónimo de un tipo

no pueden ser sobrecargados, simplemente por la operación que desarrollan. Es decir, no


existe otro contexto en el que puedan operar.

Tampoco es posible definir nuevos símbolos como operadores; por ejemplo ** para la
potenciación, así mismo, no se puede redefinir el número de operandos de un operador.

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


para definir operaciones matemáticas con elementos tales como números complejos,
vectores y matrices. Así, sobrecargando adecuadamente los operadores suma (+) y
asignación (=), 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 inserción y extracción 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
estándar co
omo la sigu
uiente:
cout << a[];

Para ponerr en práctic


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 núm
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 núme eros enteross (por
ejemplo: 5 + 3), ta ambién númmeros realees (por eje
emplo: 10.2
25 + 4.655 5), así
como números ente eros con nú
úmeros reales (por eje
emplo: 0 + 1.25). Esto
os son
tres conte
extos difere
entes.
 

Las líneas de código necesarias s para sobrecargar a l operador de suma ((+) y con e ello se
puedan su umar números comple ejos se pres
sentan a co
ontinuación
n (no olvides ir realizan
ndo el
programa a la par de tu explicación):
 

 
Explicación
n:

A
Antes de declarar
d y definir
d la función 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 números con una parte
p decim al, estos d
dos miembrros almaceenarán
la parte rea
al y la parte
e imaginaria
a de los núm
meros com plejos que se sumaran.

Enseguida se realizó la declarac


ción y definiición de la función que sobrecarrgara al ope
erador
ssuma (+), de
d la siguiente forma:
 
 

El tipo de datos
d que devolverá
d esta función
n cuando fin
nalice su ejecución 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 nción es op
perator+ ( ) y se lee: opereitor m más. A
esta función 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 número complejo o. De esta a forma no o se alteraa el número de
o
operandos que posee e el operado
or suma (+)).

Después del
d paréntes sis de cierrre “)” donde se decla
araron los a
argumentoss, se encue entran
escritas las
s siguientes líneas dee código, mismas
m quee define el trabajo qu
ue realizara
a esta
ffunción:

 
Lo primeroo que se reealizo es la declaracióón 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 línea de código
c se re
ealizó la as
signación de
e la suma d
de dos núm
meros comp plejos,
esta inform
mación se pasará au utomáticam mente com o argumen nto cuando o el comppilador
d
detecte al operador de suma (+), ( lo quee hará estaa línea de código ess almacenaar dos
números 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 línea de código se realiza
r la su
uma de los números 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
operación 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
ación entre llaves de ccierre y ape
ertura ({ y }))).

El resultado de esta operación


o se
s almacen na dentro d mp declarado de
del objeto llamado tem
ttipo compleejo. Cuando finalice la ejecución n de la funnción, é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 función
n operator+
+() se decla
aró de
ttipo compleejos y al final se le esc
cribió la siguiente instrrucción:

 
Esta línea de código indica al compilador
c que cuanddo finalice la ejecució
ón de la fu
unción
d
debe regresar el conte
endido del objeto llamado temp.

Para imple
ementar toodo lo ante eriormente explicadoo dentro de la funcióón principa
al del
programa se
s escribierron las sigu
uientes línea
as de códig
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
asignación (es necesaario escribirr esta digna
ación 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 ninggún valor, pero éste servirá
s para
a almacena ar el resulta
ado de la ssuma de lo
os dos
números co omplejos allmacenado os en los ob
bjetos x e y respectivamente.

La siguientte línea de código


c realiza la suma
a de dos núúmeros commplejos, es en esta lín
nea en
d v reflejado todo el trabajo desarrrollado hastta el mome
donde se ve ento:

Esta líneaa de códiggo 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 función operator+(). Los
vvalores que
e se almace
enen x e y deben de ser
s númeross complejos.

Puedes obbservar quee es una línea de có ódigo senccilla, pero m


muy importtante, ya qque el
o
operador suma (+) esstá preparad
do para acttuar sobre más objetoos, en un co
ontexto adicional
a los que trabajaba de forma estándar, esto es, e el operadorr suma (+)) puede ¡ssumar!
números 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 númerros comple ejos a
ttravés del operador
o su
uma (+) es convenien nte mostrar el contenid
do del objeto z en la salida
estándar dee la computadora (la pantalla).
p

Para realizar esta ope


eración se escribieron
e las siguien
ntes líneas d
de código:

Cuando ten ngas listo tu


u programa a y lo pruebbes podrás vverificar qu
ue el objeto cout y su
o
operador de inserción 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
demás 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
spués 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 inseerción no están
e sobreccargados p para operarr con números
complejos.
El resultado
o de editar,, depurar y compilar el código 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 gramación C++ perm mite al
programador asociar una funció ón a un op perador esttándar, 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 aritméticas con números complejos,, a través de la
ssobrecargaa de los opeeradores arritméticos

Instrucciones:

1. Retooma el código fuente del program ma que acaabas de revvisar y añaade las líne eas de
código necesarias para declarar y definir tre es funciones más, es decir, el ccódigo
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 estánddar: suma (+), resta ((-), multipliccación
(*) y división (/)),
2. Los operandos s de cada uno
u de los operadores
o s se deberáán 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 válid da. El
archhivo que de ebes subir a la platafo
orma es el ccódigo fuennte, es deccir el archivvo con
exteensión .c quue se realizó
ó.

Cuando tenngas listo tu


t archivo guárdalo
g en tu PC y envíalo con tus datoss en el sigu
uiente
fformato: ap
pellidopaterrno_matern
no_nombre_ _actividadn
numero

Esta activid
dad tiene un valor de 2 puntos

Conclusión
n:

Un operado or es un síímbolo quee le indica al


a compilad dor la realizzación de u
una determ
minada
ooperación sobre varia ables u objetos.
o Cuuando un o operador e es capaz de desarrollar su
ffunción 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
gramación Orientada
O a Objetos.
Unidad Il. Herenciia.

2
2. Herencia
a.

Introducción
n.

Las carac cterísticas fundamenttales de la Progra amación O Orientada a Objetoss son


abstracciónn, encapsulamiento y polimorfismo, aunqu ue todas esstas son m muy importa
antes,
hay una qu ue destaca a de las demás: 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
ambién se p
puede
utilizar parra definir una nuevaa clase qu ue añada nuevas ca aracterísticaas a una clase
existente.

La herencia permite al program mador crearr una clase


e, modifica
ando una o más classes ya
existentes, estas moodificacione
es generalm
mente conssisten en añadir nueevos atribu
utos y
métodos a la clase que se está creando (dderivando),, aunque ta
ambién 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
métodos qu ue se le de
eclaren a unna clase deerivada ade emás de de escribir las característticas 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 proogramación n C++ las cclases derivvadas


“heredan” todos los atributos y métodos 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
característiicas 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 código sin tenerr que escrib birlo de nue
evo. Esto es posible p
porque
ttodas las clases derivadas puede en utilizar el
e código dee su clase base sin te
ener que voolver a
escribirlo en cada una a de ellas, más
m adelan nte se te mo
ostrará un e
ejemplo de esto.

A continuación 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:
Explicación
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 públicoo, 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 públicos
p (public) en la
a clase basse, se hereedarán en la a clase derrivada
como públicos.

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 prívate
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 información. Lo referente
r a los modificcadores pu ublic, proteccted y
prívate 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 líneas de
e código 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 líneas de código 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 básicos 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 código 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 números del 0 al 9.
 No se pueden utilizar caracteres especiales (puntos, comas, signos de admiración o
de interrogación, etc.,) el único carácter que es aceptado es el guión bajo ( _ ).
 El nombre de una clase derivada se puede formar con números y letras pero no se
puede iniciar con un número.
 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 mayúsculas y minúsculas. 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
carácter después 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
deberán declarar dos métodos; 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 método deberá llamarse Obtener_edad, mismo que se encargara
de mostrar en pantalla la edad del cuentahabiente.

Recuerda que estos dos métodos deberás declararlos y definirlos dentro de la llave de
apertura y de cierre de la clase de objetos derivada ({ y };)

Enseguida se muestra el código fuente del programa llamado CCuenta, éste contiene la
declaración y definición 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 código
fuente puede ser igual o similar al que realizaste para la actividad de aprendizaje 3,
Analízalo y si no pudiste realizar la actividad, edítalo y compílalo.

Da clic en el siguiente vínculo para que se despliegue el programa:

Archivo 3 

Ya que hayas analizado, editado, depurado y compilado el programa CCuenta, continúa


leyendo el ejemplo de la clase derivada, a continuación se muestran las líneas de código
del mismo remarcado con rojo:
Explicación
n:

Después de d la llave de cierre de la declaración y definición de la classe base llaamada


CCuenta , que en es ste ejemplo
o en la cla
ase base, sse realizo la declaracción de la clase
derivada lla
amada CCu uenta_joven
n por medio
o de la sigu a de código:
uiente línea

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
métodos 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.
 Núúmero de cu uenta.
 Tip
po de interé
és
 Sa
aldo

Del mismmo modo CCuenta_jo


C oven “here
eda” los sig
guientes m
métodos que son
públicos (public):

 Asign
nar el nomb bre del cuen ntahabiente
e.
 Obtener el nombre del cue entahabientte.
 Asign
nar el núme ero de cuen nta.
 Obtener el núme ero de cuen nta.
 Asign
nar el tipo de
d interés.
 Obtener el tipo ded interés.
 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 líneas de
e código sig
guientes:

private:

El modifica
ador prívate e indica al compiladorr que los a
atributos qu
ue se decla
aren después de
esta línea de código serán 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 mmétodos quue se decla
aren después de
esta línea de
d código serán
s de tip
po públicos. En este e
ejemplo se d
declararon tres métod
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 podría 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 existía el atributo
o llamado Edad y ob bviamente no se
escribió nin
nguna línea
a de código que lo iniciara.

En concluusión, si se
s heredarran los co onstructorees no se podrían 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 métod
dos (un co nstructor ta
ambién es un método
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 método llamado As signar_eda ad() es de tipo


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

El método llamado Ob btener_edaad() también n es de tipo


o void, por lo que no d
devolverá nningún
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 inserción.

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
líneas
s de código
o que decla
araron atribu
utos y méto
odos de su clase basee.

Para saberr más:

Para que la reutilizac


ción de códdigos entre las clasess base y de erivada
pueda serr posible, el Lengu uaje de programaci
p ón C++ genera
automática
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 méétodos, 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 ambién 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 métodos:

El Lenguajee de progra
amación C+ ++ provee el e mecanis mo necesa ario para ge
enerar un aarreglo
d
de atributo
os y métod dos que ha aga más se encilla la rreutilización
n del códiggo fuente d de las
clases bas se, retom
mando el ejemplo anterior,
a para el atrributo nom mbre se g genera
automáticaamente 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 prrogramación 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 travéés 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
podrás
realizar las siguientes.

Instrucciones:

1. Edita el
e código fue
ente del pro
ograma “CC
Cuenta” qu e acabas d de descarga ar y revisar.
2. Añade las siguien
ntes líneas de
d código dentro
d de la
a función prrincipal del programa:

 
  
3 Explica detalladamente a través de comentarios en cada una de las líneas de código el
funcionamiento de las mismas.
4 Depura y compila el código fuente completo (el programa “CCuenta” con las líneas de
código que se añadieron).
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 válida. El archivo
que debes subir a la plataforma es el código fuente, es decir el archivo con extensión
.cpp que se realizó.

6 Como una ayuda para ti, se te presenta una pequeña explicación de las líneas de
código que vas a añadir. 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 guárdalo en tu PC y envíalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos

Explicación:

Estas líneas de código 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 método de asignarnombre() por medio del operador punto (.) para ambos
objetos, de igual forma que el método obtenernombre() a la clase llamada CCuenta_joven,
que es la clase derivada,
A la clase derivada no se le declaró explícitamente ningún atributo llamado nombre,
tampoco un método para asignar esta información ni un método para obtener el nombre del
cuentahabiente, pero los “heredo” de su clase base, por lo tanto posee todos los atributos y
métodos de su clase base y además los que se le declararon explícitamente, es decir, al
atributo Edad y a los métodos 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
través de la herencia simple, en un programa escrito en Lenguaje C++.
 
Instrucciones:

1 Edita el código fuente del programa que realizaste en la actividad de aprendizaje 6 y


añade dentro de la función principal del programa las líneas de código necesarias para
que se utilicen los once métodos con que cuenta el objeto llamado CUENTA01 de la
clase de objetos derivada llamada CCuenta_joven.

Los once métodos mencionados son los siguientes:

1. Asignar el nombre del cuentahabiente


2. Obtener el nombre del cuentahabiente.
3. Asignar el número de cuenta.
4. Obtener el número de cuenta.
5. Asignar el tipo de interés.
6. Obtener el tipo de interés.
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 código fuente completo resultante y explica detalladamente en


cada una de las líneas de código 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 válida. El archivo
que debes subir a la plataforma es el código fuente, es decir el archivo con extensión
.cpp que se realizó.

Cuando tengas listo tu archivo guárdalo en tu PC y envíalo 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 confusión que suele ocurrir al programar en C++ aparece con la herencia, y es el
relacionado con el control del acceso a la información, es decir, si se te hiciera la siguiente
pregunta que responderías: ¿crees que el método 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 prívate en la declaración de los atributos de una clase de objetos, se protege a
dichos atributos, por lo tanto ningún método externo a la clase puede leer o alterar el
contenido de los atributos.

Una pregunta más ¿crees que sea posible declarar y definir nuevos métodos 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 declaración de los
atributos de una clase base de objetos, se protege a dichos atributos, por lo tanto ningún
método 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 método qu
ue acceda ((lea o modiifique)
a sus atribu
utos hereda
ados.

Para hacerr posible qu


ue un méto 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
ción se muuestra un ccódigo fuennte en el que se
retoman lass líneas de código de la clase CC Cuenta_jovven explicad
do anteriorrmente, léelo con
atención y reflexiona acerca
a de su
s funcionaamiento.

Para ver el código fue


ente da clic en el siguie
ente vínculo
o:
 

A
Archivo 6.

Y
Ya que hayyas analizado el códig
go fuente, se te muestrra la image
en del progrrama que re
esulta
d
de compilarlo y enseg
guida se dará su expliccación:

Explicación
n:

En el código 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
nformación 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 métodos, el primero es el
constructor de la clase de objetos CCuenta, mismo que inicia al atributo nombre con una
cadena de caracteres vacía, este método es el siguiente:

// Métodos

public:

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

nombre = "";

Enseguida se muestran los otros dos métodos que se declararon:

void asignarnombre(string nom)

nombre = nom;

string obtenernombre()

return nombre;

Estos son los dos últimos métodos de la clase de objetos CCuenta, el método llamado
asignarnombtre() es el encargado de asignar la información referente al nombre del
cuentahabiente en el atributo llamado nombre.

El método llamado obtenernombre() es el método encargado de regresar el contenido del


atributo nombre, esto previamente ya se había explicado.

Enseguida y después de la llave de cierre con punto y coma de la clase CCuenta se derivó
una clase llamada CCuena_joven, a la cual además de un atributo llamado Edad y dos
métodos, uno para asignar la edad y otro para mostrar la edad del cuentahabiente en la
pantalla de la computadora, (esto también ya se había explicado antes) se le declaró un
método llamado Modificr_nombre(), a este método no se le declaro ningún argumento,
quedando de la siguiente manera:

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

El trabajo de este método es acceder y modificar al atributo “heredado” llamado nombre de


tipo strig, y almacenar la cadena de carcetres IsRrAeL.

Enseguida se muestran las siguientes líneas de código escritas en la función principal del
programa, mismas que implementan los métodos declarados en las clases de objetos:

CCuenta c;
CCuenta_joven C;

Estas dos líneas de código 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 continuación se encuentra la siguiente línea de código:

string N;

Esta línea de código declara una variable llamada N de tipo string, la cual almacenará el
nombre del cuentahabiente, para ambos objetos (c y C). esta información es solicitada a
través de un mensaje en la pantalla de la computadora y recibida por medio de la entrada
estándar (el teclado) y almacenada primero en la variable llamada N y después pasada
como argumento por medio del método asignarnombre() de ambos objetos , gracias a las
siguientes seis líneas de código:

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 información referente al nombre de los
cuentahabientes (lo más recomendable es que sean nombres diferentes, aunque puede ser
el mismo), para saber qué información se almacenó en cada uno de los atributos se
implementó al método 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 líneas de código
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 ejecución::

Enseguida se muestrra la línea de código que invocca por med dio del “operador pun nto” al
método llammado Modificar_nomb erda que esste método fue declara
bre(), recue ado y definiido en
la clase derivada CCu
uenta_joven
n:

C.Modifica
ar_nombre();

Este métoddo 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 método
o realizó co
orrectamentte su trabajjo se invocó nuevame
ente al
método 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


más clases ya existentes, estas modificaciones generalmente consisten en añadir nuevos
atributos y métodos 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 programación C++ las clases derivadas
“heredan” todos los atributos y métodos de su clase base, excepto el constructor de la
clase base.

Para hacer posible que un método 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
gramación Orientada
O a Objetos.
Unidad Il. Herenciia.

Introducció
ón.

En ocasionnes el prog gramador posee dos s o más cllases de o objetos quee evidentem mente
d
declaró y definió conn anteriorid
dad, cada una fabriccada con u un propósitto específico, el
Lenguaje de
d program mación 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 mmúltiple

3. Herencia
a múltiple.

El mecanissmo de la herencia provisto


p por el Lenguaje de pro ogramación 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 ccódigo fuen
nte de
ddos o más clases basse ya existe
ente para crear una nuueva clase de objetoss, a este pro oceso
sse le conoc
ce como heerencia múltiple.

encia múltiple es fácil crear una clase de o


Con la here objetos que e reúna las característticas 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 métod do que defiine el comportamiento que
ttiene una caja
c de velo
ocidades pa
ara automóv vil automáttico 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 híbridos, cuyo
comportam miento pued
da ser el de una caja de
d velocidaddes automáática o man
nual.

A continua
ación se prresenta el código fueente y el p
programa e ejecutable que contie ene la
implementa
ación de las
s dos clase
es de objeto
os mencion adas en el ejemplo, a
analízalos.

Para mosttrarte los archivos mencionado


m os da clicc sobre lo
os vínculoss “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 más
m de una a clase basse:
Explicación:

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 público, sirve para indicar al
compilador que los atributos de la clase derivada se “heredaran” tal y como fueron
declarados, es decir, los atributos declarados públicos (public) en la clase base, se
heredaran en la clase derivada como públicos, 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 modificación indebida de
información.

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


número 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 líneas de código que pertenecen a una clase
derivada de objetos.

}; (Llave de cierre)

La llave de cierre indica el final de las líneas de código 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 números
n de
el 0 al 9.
 No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiracción o
de in
nterrogación, etc.,) el único caráccter que es aceptado e es el guión bajo ( _ ).
 El nombre de unau clase derivada
d see puede forrmar con números y le etras pero no se
puedde iniciar co
on un núme 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 mayúsculas
m y minúscu 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 después 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 gramación C++ perm mite al
programador derivar una clase a partir de una o m más 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 másm de unna clase dee objetos yya existente, a travéss de la herrencia
múltiple, en
n un prograama escrito en Lengua aje C++.

Instrucciones:

1 Editaa el código fuente del programa que realiza


aste en la a
actividad dee aprendiza
aje 7 y
añade las líneas de código o necesariaas para de erivar una clase de objetos lla amada
HIBRIDDO, sus cla ases base serán: la clase de o objetos AUUTOMATICO O y la clase de
objetoss MANUAL, añade tam mbién las líneas de cóódigo neceesarias dentro de la fu
unción
principa
al del proggrama que utilicen los cuatro mmétodos co on que cue enta la classe de
objetoss derivada llamada HIB
BRIDO, loss cuatro méétodos son llos siguienttes:

1.
1 Manual
2.
2 Automáttico
3.
3 Encendeer
4.
4 Apagar

2 Depura y comp pila el códig


go fuente completo
c reesultante y explica de
etalladamen
nte en
cada una de las lííneas de cóódigo 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 vválida. El archivo
que debes subir a la plataforma es el código fuente, es decir el archivo con extensión
.cpp que se realizó.

Cuando tengas listo tu archivo guárdalo en tu PC y envíalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos


 
Conclusión.

El mecanismo de la herencia múltiple provisto por el Lenguaje de programación C++


permite al programador derivar una clase, modificando una o más clases ya existentes.
Esto puede ser muy útil para reutilizar el código fuente de dos o más clases base ya
existente.

La clase de objetos derivada que se obtiene en un proceso de herencia múltiple “hereda”


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

¡Muy bien, solo falta un tema para finalizar!

 
Prog
gramación 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 prívate dee una clase
e de objetoss, no son aaccesibles ppara métod
dos (funcionnes) y
clases exte
ernas a dic cha clase. Pero pued de ser nece esario o coonveniente que un m método
externo a la clase pueeda tener acceso
a priv
vilegiado a los atributo
os de una cclase de ob
bjetos,
aún cuanddo estos se e hallan declarados como privvados. El L Lenguaje dde program mación
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 programación C+ ++ por
medio del cual
c el proggramador puede
p otorg
gar un permmiso o privillegio a un m
método (fun nción)
que no pertenezca a una clase e de objetoos, con estto el métod 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 protección que se obtien ne al escriibir el
modificador prívate ene la declaración de e los atrib utos de una clase d de objetoss. Las
relaciones de "amistadd" entre cla
ases y méto
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 simétricca. 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 función (la declaraciión de
la función sin la de efinición) dentro
d de la clase d de la que se preten nde sea a amiga,
precediénd dola por laa palabra reservada
r friend.
f Ensseguida see muestra la sintaxiss para
realizar estta declaraciión y posteriormente sus explicaciión:
Explicación
n:

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

ttipo: Es el tipo de datos que devolverá


d la
l función al termina
ar su ejecuución, pued
de ser
cualquiera de los tipo
os primitivo
os o derivados o en eel caso en que la fun
nción no de
ebiera
ddevolver ningún valor se escribe la palabra reservada void

Nombre_de
e_la_funcio
on: Es el no
ombre de la
a función.

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 números
n de
el 0 al 9.
 No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiracción o
de in
nterrogación, etc.,) el único caráccter que es aceptado e es el guión bajo ( _ ).
 El nombre de unau función n amiga see puede forrmar con nú úmeros y le etras pero no se
puedde iniciar co
on un núme ero.
 No se
s pueden utilizar com mo nombres de una fu unción 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 mayúsculas
m y minúscu 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 después 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
ffunción sea
a “amiga”.

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

En medio ded los parén


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

Nota: la de
efinición de la función debe realiz
zarse desp
pués 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 función n amiga, se e te preseenta a
continuació
ón un códig
go fuente enn él se enc
cuentra la d
declaración y definición
n de una fuunción
amiga de la
a clase de objetos llam
mada HIBR RIDO, el traabajo de la función ammiga es alte
erar el
contenido que almac cena uno ded los atributos de la clase de
erivada llam
mada HIBR
RIDO,
A
Analízalo detalladame
d ente y recue
erda que lo
o debes rea
alizar.

Da clic en el
e siguiente
e vínculo pa
ara que pue
edas ver ell programa::

“PDF 10”

Explicación
n:

En el códig
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 decclaración y definición 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, ademmás cuentaa con un mmétodo
llamado CAMBIO_MA
C ANUAL() mismo
m que es de de ttipo void (n
no regresa ningún valo
or) en
este métoddo se escribbieron las lííneas de có
ódigo que d
definen el comportamie ento de una
a caja
d
de velocida
ades (manu ual) de un automóvil.
a

Enseguida se escribió efinición de la segund


ó la declarración y de da clase de e objetos que se
utilizo para derivar a la
a clase llammada HIBRRIDO, su de eclaración y definición
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, ademmás cuenta a con un método lla amado
CAMBIO_A AUTOMATICO () mism mo que es ded de tipo vvoid (no reg
gresa ningúún valor) enn este
método se escribieron n las líneas
s de códigoo que defin en el comp portamientoo de una ca aja de
vvelocidades (AUTOMA ATICO) de un automó óvil.

A continuac
ción se te muestra
m el proceso dee herencia mmúltiple aplicado a la clase de objetos
llamada HIBRIDO, es decir la deerivación 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
demás
cuenta con n dos méto
odos, el prim
mero es llaamado EN NCENDER()) mismo qu ue es de de tipo
vvoid (no reegresa ning
gún valor) en este método
m se e
escribieronn las líneass de códigoo 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 automóvil 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 inserción 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 incepciónn 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 automóvil en
e una form ma visual.

El siguiente e llamado APAGAR


e método es R() mismo q que es de tiipo void (noo regresa nningún
vvalor) en este
e método
o se escribbieron las lííneas 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 automóvil está apag gado, enseg guida por mmedio del objeto coutt y su
ooperador ded inserción
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
automóvil 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 función a
ación) de la amiga
llamada ENNEMIGA (M Más adelantte cuando se
s te expliqque el traba
ajo que rea
aliza esta fu
unción
ssabrás el porqué
p de este
e nombree):

Para declarar (escribir) el prototipo de esta función es necesario escribir antes del tipo
o de la
ffunción la palabra resservada frieend esto le
e indicará a
al compilad dor que se está decla arando
una función amiga. Esta
E funció
ón es de tipo void (n no regresa a ningún vaalor) y entre los
paréntesis (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.

Después 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
nción amiga
a llamada E
ENEMIGA(). De este mmodo:
En la definición de estta función 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
nción (
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 unción
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 automóvil, y por med dio del
oobjeto coutt y su operrador de ins serción 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 función 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 métodos s ENCEND DER(). CAMMBIO_AUT TOMATICO O, a la
ffunción llam
mada ENEMMIGA(), al método 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 código ffuente
completo de
d este pro ograma esc crito en Len
nguaje C+++ da clic en el siguiente vínculo
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 gramación C++ perm mite al
programador declararr y definir una función 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
declaración, definición e implementación de una función amiga, mecanismo provisto por el
Lenguaje de programación C++

Instrucciones:

1 Edita el código fuente del programa que acabas de realizar, y añade las líneas de
código 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 código fuente completo resultante y explica
detalladamente en cada una de las líneas de código 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 válida. El archivo que debes subir a la plataforma es el código fuente,
es decir el archivo con extensión .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 guárdalo en tu PC y envíalo con tus datos en el
siguiente formato: apellidopaterno_materno_nombre_actividadnumero

Esta actividad tiene un valor de 5 puntos 

Conclusión.

Un operador es un símbolo, cuando éste es capaz de desarrollar su función 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 más 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 programación C++ las clases derivadas “heredan” todos los
atributos y métodos de su clase base, excepto el constructor de la clase base.

Del mismo modo el mecanismo de la herencia múltiple provisto por el Lenguaje de


programación C++ permite al programador derivar una clase, modificando una o más
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 método (función) que no
pertenezca a una clase de objetos, con esto, el método 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

También podría gustarte