Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2do DEP POO
2do DEP POO
Mapa de contenidos
Unidad II
Herencia
Operador Control de
sobrecargado acceso a los
atributos de las
clases
1. Sobrecarga de operadores.
Introducción:
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”.
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[] ~
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
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.
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[];
Problema:
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.
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 }))).
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.
El resultado
o de esta suma
s se alm
macena en el objeto lla
amado z.
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ó
ó.
Esta activid
dad tiene un valor de 2 puntos
Conclusión
n:
¡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.
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.
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
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.
{ (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.
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.
Archivo 3
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
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.
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;; }
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 ()
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.
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.
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
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”
Cuando tengas listo tu archivo guárdalo en tu PC y envíalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero
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?
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.
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 = "";
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.
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"; }
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.
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:
cin >>N;
c.asignarnombre(N);
cin >>N;
C.asignarnombre(N);
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();
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:
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!
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.
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.
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.
: 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.
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.
{ (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.
1 Manual
2.
2 Automáttico
3.
3 Encendeer
4.
4 Apagar
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
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.
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.
Nombre_de
e_la_funcio
on: Es el no
ombre de la
a función.
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.
( ); (Paren
ntesis de ap
perura y Pa
arentesis de cierre)
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
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.
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.
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
Conclusión.
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.
Terminaste la Unidad II