Professional Documents
Culture Documents
Mapa de contenidos
UnidadII
Herencia
Operador Controlde
sobrecargado accesoalos
atributosdelas
clases
1. Sobrecarga de operadores.
Introduccin:
Explicacin
n:
T
Tipo: Es el
e tipo de datos
d que devolver la funcin al terminaar su ejecuucin, pued
de ser
cualquiera de los tipo os o derivados o en e
os primitivo el caso en que la fun
ncin no de
ebiera
d
devolver ningn valor se escribe la palabra reservada void
o
operator: Es
E una palabra reserva
ada cuya tra
aduccin a l espaol e
es operado
or.
La llave de cierre indica el final de las lneas de cdigo que pertenecen a la funcin que
sobrecarga al operador. Observa que esta llave de cierre no termina con el operador punto
y coma (;).
Ya que se te mostraron los elementos bsicos para declarar y definir una funcin que est
vinculada a un operador estndar, se te indican cuales son los operadores que permite
sobrecargar el Lenguaje de programacin C++:
+ - * / % ^ &
| ! = < > += -=
*= /= %= ^= &= |= <<
>> >>= <<= == != <= >=
&& || ++ -- ->* , ->
[] () new new[] delete delete[] ~
Operadores Nombre
:: Resolucin de mbito
. Seleccin de un miembro
.* seleccin de un miembro referenciado por
un puntero
sizeof() tamao de
typeft sinnimo de un tipo
Tampoco es posible definir nuevos smbolos como operadores; por ejemplo ** para la
potenciacin, as mismo, no se puede redefinir el nmero de operandos de un operador.
Otro ejemplo muy utilizado, es sobrecargar los operadores de insercin y extraccin en los
flujos de entrada y salida (<< y >> respectivamente), de manera que estos operadores
puedan imp primir o lee
er estructurras o clases
s con una ssentencia e
estndar co
omo la sigu
uiente:
cout << a[];
Problema:
Las lneas de cdigo necesarias s para sobrecargar a l operador de suma ((+) y con e ello se
puedan su umar nmeros comple ejos se pres
sentan a co
ontinuacin
n (no olvides ir realizan
ndo el
programa a la par de tu explicacin):
Explicacin
n:
A
Antes de declarar
d y definir
d la funcin que sobrecargu
ue al opera
ador suma (+) es nece esario
d
declarar un
na estructuura de dato os, para es
ste ejemplo
o se decla
ar una estructura lla
amada
complejos, de esta forrma:
El tipo de datos
d que devolver
d esta funcin
n cuando fin
nalice su ejecucin ess del tipo lla
amado
complejos, recuerda que al momento de declarar un na estructuura de datoos se gene era un
nuevo tipo de datos. El nombre de esta fun ncin es op
perator+ ( ) y se lee: opereitor m ms. A
esta funcin se le decclararon dos
s argumenttos llamadoos a y b, am
mbos son de e tipo comp plejos,
por lo tanto
o, cada uno o de estoss argumenttos son cappaces de a almacenar lla parte rea al y la
parte imag ginaria de un nmero complejo o. De esta a forma no o se alteraa el nmero de
o
operandos que posee e el operado
or suma (+)).
Despus del
d parntes sis de cierrre ) donde se decla
araron los a
argumentoss, se encue entran
escritas las
s siguientes lneas dee cdigo, mismas
m quee define el trabajo qu
ue realizara
a esta
ffuncin:
Lo primeroo que se reealizo es la declaracin de un objeto llamaado temp dde tipo com
mplejo,
este objeto
o puede alm
macenar la parte real y la parte immaginaria d
de un nume ero comple
ejo, en
esta mismaa lnea de cdigo
c se re
ealiz la as
signacin de
e la suma d
de dos nm
meros comp plejos,
esta inform
macin se pasar au utomticam mente com o argumen nto cuando o el comppilador
d
detecte al operador de suma (+), ( lo quee har estaa lnea de cdigo ess almacenaar dos
nmeros co omplejos con
c su parte e real e imaginaria, uno en el aargumento llamado a y otro
en el argum
mento llamaado b.
En la mism
ma lnea de cdigo se realiza
r la su
uma de los nmeros ccomplejos:
Como pued des observar primero se suma la a parte real del argumento llamad do a con la
a parte
real del arg
gumento lla amado b, y separado o por el op erador com ma (,) se rrealiza la m misma
o
operacin pero
p con laa parte imagginaria de cada
c uno d de los dos aargumentoss, es decir a y b.
(Es necesaario escribirr esta opera
acin entre llaves de ccierre y ape
ertura ({ y }))).
Esta lnea de cdigo indica al compilador
c que cuanddo finalice la ejecuci
n de la fu
uncin
d
debe regresar el conte
endido del objeto llamado temp.
Para imple
ementar toodo lo ante eriormente explicadoo dentro de la funcin principa
al del
programa se
s escribierron las sigu
uientes lnea
as de cdig
go (remarca
adas con ro
ojo):
Como pue edes obserrvar se declararon trres objetoss llamados x, y, z, los tres de
e tipo
complejo.
A
Al objeto lllamado x se
s le asign no el nume ero complejjo 10, 32 ppor medio del operad dor de
asignacin (es necesaario escribirr esta digna
acin entre llaves de a
apertura y ccierre { }).
A
Al objeto llamado y se e le asigno
o el numeroo complejo 21, 12 y a al objeto llamado z no
o se le
asigno ninggn valor, pero ste servir
s para
a almacena ar el resulta
ado de la ssuma de lo
os dos
nmeros co omplejos allmacenado os en los ob
bjetos x e y respectivamente.
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 gramacin C++ perm mite al
programador asociar una funci n a un op perador esttndar, parra sobrecarrgarlo, realliza la
ssiguiente actividad,
a la
a cual tiene
e por objetiv
vo que con
nstruyas sooftware esccrito en Lennguaje
C++ capaz z de realizar operacio ones aritmticas con nmeros complejos,, a travs de la
ssobrecargaa de los opeeradores arritmticos
Instrucciones:
1. Retooma el cdigo fuente del program ma que acaabas de revvisar y aaade las lne eas de
cdigo necesarias para declarar y definir tre es funciones ms, es decir, el ccdigo
fuennte debe tener declara adas y definidas cuat ro funcione
es, cada un na de ellas debe
estaar asociada a un opera ador aritm
tico estnddar: suma (+), resta ((-), multipliccacin
(*) y divisin (/)),
2. Los operandos s de cada uno
u de los operadores
o s se debern introducir por med dio del
ado de la co
tecla omputadoraa.
3. Debes enviar tu archivo hasta
h que haya
h sido co
ompilado, ees decir que Dev C++ + no te
haya a marcado error, de lo contrario o no se toomar esta a actividad como vlid da. El
archhivo que de ebes subir a la platafo
orma es el ccdigo fuennte, es deccir el archivvo con
exteensin .c quue se realiz
.
Esta activid
dad tiene un valor de 2 puntos
Conclusin
n:
Muy bie
en, el prime
er tema lo h
has terminado!
Sigue
e adelante!!
Prog
gramacin Orientada
O a Objetos.
Unidad Il. Herenciia.
2
2. Herencia
a.
Introduccin
n.
Cabe mencionar que e a la clasee existentee, es decir,, la que yaa fue decla arada y de efinida
previamentte se le llama clase base
b y a la nueva
n clasee se le den
nomina classe derivada a, sta
a su vez puede
p ser clase
c base en un nue evo proceso o de heren ncia, los nuuevos atribuutos y
mtodos qu ue se le de
eclaren a unna clase deerivada ade ems de de escribir las caracterstticas y
comportammiento de loos objetos creados
c a partir
p de estta clase de objetos, vaan a diferen
nciarla
d
de su clase
e base.
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 lneas de
e cdigo qu
ue pertenecen a una clase
d
derivada de
e objetos.
}}; (Llave de
e cierre)
La llave de
e cierre indica el finaal de las lneas de cdigo que perteneccen a una clase
d
derivada de
e objetos. Esta
E llave de
d cierre sie
empre term
mina con el operador p
punto y com
ma (;).
AAhora que se te mostraron y ex xplicaron los elemento os bsicos para declaarar y definir una
clase deriv
vada de obbjetos se tee presenta otro ejemp plo de estoo, se prete
ende derivaar una
nueva casee de objeto
os a parir de
e una clasee base de o objetos llam
mada CCue enta, para lo
o cual
sse retomar el cdigo fuente rea
alizado en laa actividad de aprendiizaje 3 .
Nota: Para
P dar no
ombre a las clases derrivadas se d uir las siguientes
deben segu
reglas:
Se pueden utilizar casi todas las letras del alfabeto, excepto la .
Se pueden utilizar los nmeros del 0 al 9.
No se pueden utilizar caracteres especiales (puntos, comas, signos de admiracin o
de interrogacin, etc.,) el nico carcter que es aceptado es el guin bajo ( _ ).
El nombre de una clase derivada se puede formar con nmeros y letras pero no se
puede iniciar con un nmero.
No se pueden utilizar como nombres de clases derivadas las palabras reservadas
que usa el compilador, por ejemplo: for, main, do, while, etc.
El Lenguaje C++ distingue entre maysculas y minsculas. Por lo tanto: nombre,
Nombre y NOMBRE, son tres nombres de clases derivadas distintas.
Los nombres de las clases derivadas deben ser cadenas de caracteres, es decir, un
carcter despus de otro sin espacios entre ellos.
Recuerda que estos dos mtodos debers declararlos y definirlos dentro de la llave de
apertura y de cierre de la clase de objetos derivada ({ y };)
Enseguida se muestra el cdigo fuente del programa llamado CCuenta, ste contiene la
declaracin y definicin de la clase de objetos llamada CCuenta, a partir de esta clase
base se realizar la clase derivada que se te va a presentar como ejemplo, este cdigo
fuente puede ser igual o similar al que realizaste para la actividad de aprendizaje 3,
Analzalo y si no pudiste realizar la actividad, edtalo y complalo.
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
mtodos que hereda la clas se llamadaa CCuenta_ _joven se heredan tal y com mo se
d
declararon en la clase
e base llamada CCuen nta.
Nota: La clase derivada CCue enta_joven
n hereda de su classe base lla
amada
CCuenta los siguientes atributo
os que son privados (p
private):
Noombre del cuentahabie
c ente.
Nmero de cu uenta.
Tip
po de inter
s
Sa
aldo
Asign
nar el nomb bre del cuen ntahabiente
e.
Obtener el nombre del cue entahabientte.
Asign
nar el nme ero de cuen nta.
Obtener el nme ero de cuen nta.
Asign
nar el tipo de
d inters.
Obtener el tipo ded inters.
Realiizar un ingrreso de efectivo.
Realiizar un retirro de efectiv
vo.
Obtener el saldo o de la cuenta.
private:
El modifica
ador prvate e indica al compiladorr que los a
atributos qu
ue se decla
aren despus de
esta lnea de cdigo sern de tipo privados. En estte ejemplo nicamentte se decla ar un
atributo de tipo short llamado Edad, de estaa forma:
sshort Edad;
public:
El modifica
ador public indica al compilador
c que los mmtodos quue se decla
aren despus de
esta lnea de
d cdigo sern
s de tip
po pblicos. En este e
ejemplo se d
declararon tres mtod
dos, el
ssiguiente es el primero
o:
CCuenta_jo oven ()
{ Edad = 0;; }
Recuerda que
q los con
nstructores no se here
edan, en se
eguida se te
e explica e
el por qu ccon un
ejemplo:
Si la clase
e derivada heredara el constructor de su clase basse, que en el caso de e este
ejemplo es s CCuenta() este con nstructor no podra indicar al n buto de la clase
nuevo atrib
d
derivada CCuenta_jov
C do Edad, esto sucede
ven llamad e porque a
al declarar anteriormente el
constructorr llamado CCuenta()
C no exista el atributo
o llamado Edad y ob bviamente no se
escribi nin
nguna lnea
a de cdigo que lo iniciara.
En concluusin, si se
s heredarran los co onstructorees no se podran a agregar nuevos
componenttes a la clase
c deriv
vada, esta es la raz n por la q que al decclarar una clase
d
derivada es
s necesario
o declararle
e y definirle su propio cconstructorr.
Enseguida se declara
aron otros dos mtod
dos (un co nstructor ta
ambin es un mtodo
o), de
esta forma:
vvoid Asigna
ar_edad (sh
hort edad)
{ Edad = edad; }
vvoid Obtener_edad ()
Nota:: Necesitas
s saber dife
erenciar cu
uando una clase derivvada reutilizza las
lneas
s de cdigo
o que decla
araron atribu
utos y mto
odos de su clase basee.
A
Arreglos (a
array) de atrributos y mtodos:
El Lenguajee de progra
amacin C+ ++ provee el e mecanis mo necesa ario para ge
enerar un aarreglo
d
de atributo
os y mtod dos que ha aga ms se encilla la rreutilizacin
n del cdiggo fuente d de las
clases bas se, retom
mando el ejemplo anterior,
a para el atrributo nom mbre se g genera
automticaamente el siguiente arrreglo: nomb bre[2], por lo tanto no ombre[0] ess el atributo
o para
la clase base y nombrre[1] es el atributo
a parra la clase dderivada.
A
Actividad de
d Aprendiz
zaje 6. Herrencia
Y
Ya sabes que
q el Leng guaje de prrogramacin C++ permmite al prog
gramador d
derivar una clase
a partir de otra ya exis
stente, lo que se cono
oce como he
erencia.
Instrucciones:
1. Edita el
e cdigo fue
ente del pro
ograma CC
Cuenta qu e acabas d de descarga ar y revisar.
2. Aade las siguien
ntes lneas de
d cdigo dentro
d de la
a funcin prrincipal del programa:
6 Como una ayuda para ti, se te presenta una pequea explicacin de las lneas de
cdigo que vas a aadir. Recuerda que si tienes dudas puedes acudir con tu asesor(a),
el(ella) te apoyar con mucho gusto y aclarar tus dudas.
Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero
Explicacin:
Estas lneas de cdigo declaran dos objetos, uno llamado cuenta01, que pertenece a la
clase de objetos base, es decir a Ccuenta y el otro llamado CUENTA01 que pertenece a la
clase derivada, es decir a CCuenta_joven
Se invoca el mtodo de asignarnombre() por medio del operador punto (.) para ambos
objetos, de igual forma que el mtodo obtenernombre() a la clase llamada CCuenta_joven,
que es la clase derivada,
A la clase derivada no se le declar explcitamente ningn atributo llamado nombre,
tampoco un mtodo para asignar esta informacin ni un mtodo para obtener el nombre del
cuentahabiente, pero los heredo de su clase base, por lo tanto posee todos los atributos y
mtodos de su clase base y adems los que se le declararon explcitamente, es decir, al
atributo Edad y a los mtodos Asinar_edad() y Obtener_edad().
Instrucciones:
Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero
Una confusin que suele ocurrir al programar en C++ aparece con la herencia, y es el
relacionado con el control del acceso a la informacin, es decir, si se te hiciera la siguiente
pregunta que responderas: crees que el mtodo de una clase derivada pueda acceder a
los atributos privados de su clase base?
Una pregunta ms crees que sea posible declarar y definir nuevos mtodos en una clase
derivada, con el objetivo de modificar los atributos heredados de su clase base?
La respuesta es Si, al escribir la palabra reservada protected en la declaracin de los
atributos de una clase base de objetos, se protege a dichos atributos, por lo tanto ningn
mtodo externo a la clase puede leer o alterar el contenido de los atributos, pero al
d
derivarse una
u clase ded objetos se
s puede declarar un mtodo qu
ue acceda ((lea o modiifique)
a sus atribu
utos hereda
ados.
A
Archivo 6.
Y
Ya que hayyas analizado el cdig
go fuente, se te muestrra la image
en del progrrama que re
esulta
d
de compilarlo y enseg
guida se dar su expliccacin:
Explicacin
n:
En el cdigo fuente puedes observar que q se de clar una clase de objetos lla amada
CCuenta, a la que se e le declar nicamennte un atribbuto llamaddo nombre de tipo striing, el
cual almac cenar la in
nformacin referente ala nombre d del cuentahhabiente, o
observa que
e este
atributo fue
e declaradoo de tipo pro
otected, de la siguient e forma:
class CCue
enta
// Atributos
protected: string
s nomb
bre;
Enseguida de la palabra reservada public, se declararon tres mtodos, el primero es el
constructor de la clase de objetos CCuenta, mismo que inicia al atributo nombre con una
cadena de caracteres vaca, este mtodo es el siguiente:
// Mtodos
public:
CCuenta () // CONSTRUCTOR..........
nombre = "";
nombre = nom;
string obtenernombre()
return nombre;
Estos son los dos ltimos mtodos de la clase de objetos CCuenta, el mtodo llamado
asignarnombtre() es el encargado de asignar la informacin referente al nombre del
cuentahabiente en el atributo llamado nombre.
Enseguida y despus de la llave de cierre con punto y coma de la clase CCuenta se deriv
una clase llamada CCuena_joven, a la cual adems de un atributo llamado Edad y dos
mtodos, uno para asignar la edad y otro para mostrar la edad del cuentahabiente en la
pantalla de la computadora, (esto tambin ya se haba explicado antes) se le declar un
mtodo llamado Modificr_nombre(), a este mtodo no se le declaro ningn argumento,
quedando de la siguiente manera:
void Modificar_nombre ()
{ nombre = "IsRrAeL"; }
Enseguida se muestran las siguientes lneas de cdigo escritas en la funcin principal del
programa, mismas que implementan los mtodos declarados en las clases de objetos:
CCuenta c;
CCuenta_joven C;
Estas dos lneas de cdigo declaran dos objetos, uno es llamado c y el otro es llamado C,
el objeto c pertenece a la clase de objetos CCuenta y el objeto C pertenece a la clase
derivada llamada CCuenta_joven.
string N;
Esta lnea de cdigo declara una variable llamada N de tipo string, la cual almacenar el
nombre del cuentahabiente, para ambos objetos (c y C). esta informacin es solicitada a
travs de un mensaje en la pantalla de la computadora y recibida por medio de la entrada
estndar (el teclado) y almacenada primero en la variable llamada N y despus pasada
como argumento por medio del mtodo asignarnombre() de ambos objetos , gracias a las
siguientes seis lneas de cdigo:
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 lneas de cdigo
c se mostr
m en pantalla
p el ccontenido d
del atributo llamado noombre
dde tipo strin
ng, (tanto del
d atributo de la clase
e base com mo del atributo de la cllase derivada. El
ssiguiente ser el resulltado del prrograma en
n ejecucin::
Enseguida se muestrra la lnea de cdigo que invocca por med dio del operador pun nto al
mtodo llammado Modificar_nomb erda que esste mtodo fue declara
bre(), recue ado y definiido en
la clase derivada CCu
uenta_joven
n:
C.Modifica
ar_nombre();
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 mtodo de una clase de objetos derivada, acceda (lea o
modifique) a sus atributos heredados, es necesario escribir el modificador protected (que
significa protegido), al momento de declarar y definir los atributos de la clase base.
Excelente!
Introducci
n.
En ocasionnes el prog gramador posee dos s o ms cllases de o objetos quee evidentem mente
d
declar y defini conn anteriorid
dad, cada una fabriccada con u un propsitto especfico, el
Lenguaje de
d program macin C++ provee al programad dor un meccanismo seencillo y eficciente
para crear una nueva a clase de objetos a partir
p de cla
ases de ob
bjetos ya exxistentes, a este
mecanismo o se le cono
oce con el nombre
n de herencia mmltiple
3. Herencia
a mltiple.
A partir de
e estas dos
s clases dee objetos se pretendee derivar un
na nueva cclase de objetos
llamada HIBRIDO,
H la cual debe
d permmitir crear (declarar) objetos hbridos, cuyo
comportam miento pued
da ser el de una caja de
d velocidaddes automtica o man
nual.
A continua
acin se prresenta el cdigo fueente y el p
programa e ejecutable que contie ene la
implementa
acin de las
s dos clase
es de objeto
os mencion adas en el ejemplo, a
analzalos.
A
Archivo 7
Ejecutable 7(2)
Una vez quue has analizado y refflexionado acerca del funcionammiento del c
digo fuentte y el
programa que
q se te proporcion
p , se muesstra la sinta
axis necesa
aria para ddeclarar y d
definir
una clase de
d objetos a partir de ms
m de una a clase basse:
Explicacin:
class: Es una palabra reservada, cuyo significado es clase, sirve para indicar al compilador
que se est declarando una clase de objetos.
: Este operador indica al compilador que se est declarando una clase derivada de una
clase de objetos existente.
public: Es una palabra reservada, cuyo significado es pblico, sirve para indicar al
compilador que los atributos de la clase derivada se heredaran tal y como fueron
declarados, es decir, los atributos declarados pblicos (public) en la clase base, se
heredaran en la clase derivada como pblicos, los atributos declarados protegidos
(protected) en la clase base, se heredaran en la clase derivada como protegidos y los
atributos declarados privados (private) en la clase base, se heredaran en la clase derivada
como privados.
Esta es una herramienta que permite el acceso o protege el contenido que guardan los
atributos de una clase de objetos, para evitar la copia o modificacin indebida de
informacin.
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 lneas de cdigo que pertenecen a una clase
derivada de objetos.
}; (Llave de cierre)
La llave de cierre indica el final de las lneas de cdigo que pertenecen a una clase
derivada de objetos. Observa que esta llave de cierre siempre termina con el operador
punto y coma (;).
Nota: Paara dar nom
mbre a las clases derrivadas se d
deben segu
uir las siguientes
reglas:
Se
S pueden utilizar
u casi todas las lletras del alfabeto, exccepto la .
Se
S pueden utilizar
u los nmeros
n de
el 0 al 9.
No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiraccin o
de in
nterrogacin, etc.,) el nico carccter que es aceptado e es el guin bajo ( _ ).
El nombre de unau clase derivada
d see puede forrmar con nmeros y le etras pero no se
puedde iniciar co
on un nme ero.
No se
s pueden utilizar com mo nombre es de clasees derivada as las palaabras reservvadas
que usa el com mpilador, poor ejemplo: for, main, d
do, while, etc.
El Lenguaje
L C++
C distinguue entre maysculas
m y minscu ulas. Por lo o tanto: noombre,
Nommbre y NOM MBRE, son tres nombrres de clase es derivada as distintas.
Los nombres de d las clase es derivadas deben se er cadenas de caracte eres, es deccir, un
car
cter despus de otro sin espacio os entre ello
os.
A
Actividad de
d integrado
ora 1. Here
encia MuLtIIpLe
A
Ahora que e conoces la forma en que el e Lenguaje e de prog gramacin C++ perm mite al
programador derivar una clase a partir de una o m ms clases de objeto os ya existe
entes,
realiza la siguiente
s ac
ctividad inte
egradora, la
a cual tiene
e por objetivvo que cree
es una cla
ase de
o
objetos a partir de msm de unna clase dee objetos yya existente, a travss de la herrencia
mltiple, en
n un prograama escrito en Lengua aje C++.
Instrucciones:
1.
1 Manual
2.
2 Automttico
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 vvlida. El archivo
que debes subir a la plataforma es el cdigo fuente, es decir el archivo con extensin
.cpp que se realiz.
Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el siguiente
formato: apellidopaterno_materno_nombre_actividadnumero
Conclusin.
Prog
gramacin Orientada
O a Objetos.
Unidad Il. Herenciia.
Introducci
n.
Y
Ya se ha menciona ado que lo os atributo
os declarados como privados por medio del
modificador prvate dee una clase
e de objetoss, no son aaccesibles ppara mtod
dos (funcionnes) y
clases exte
ernas a dic cha clase. Pero pued de ser nece esario o coonveniente que un m mtodo
externo a la clase pueeda tener acceso
a priv
vilegiado a los atributo
os de una cclase de ob
bjetos,
an cuanddo estos se e hallan declarados como privvados. El L Lenguaje dde program macin
permite al programador otorga ar este privvilegio (pe rmiso) porr medio dee el mecanismo
llamado am
mistad ( friend).
4
4. Funcione
es amigas.
La amistadd (friend) es un meca anismo que e provee ell Lenguaje de programacin C+ ++ por
medio del cual
c el proggramador puede
p otorg
gar un permmiso o privillegio a un m
mtodo (fun ncin)
que no pertenezca a una clase e de objetoos, con estto el mtod do tendr la capacida ad de
acceder (le
eer y modificar) a los atributos
a dee la clase de
e objetos, a
aun cuando o los atributtos de
la clase dee objetos hayan
h sido
o declarado os como p privados. PPara hacer esto posib ble es
necesario utilizar
u el modificador
m friend.
f
La amistad
a no puede tran nsferirse, po
or ejemplo si A es am
migo de B, y B es amiigo de
C, esto no impllica que A sea
s amigo de d C.
La amistad
a no puede heredarse. Si A es amigo o de B, y C es una cllase deriva
ada de
B, A no es amiggo de C.
La amistad
a no es simtricca. Si A es amigo de B, no es foorzoso que B sea amiigo de
A.
ffriend: Es una palab bra reserva ada, cuyo significado o es amigo o(a), sirve para indiccar al
compiladorr que la funncin que se s est dec de la clase de objetos en la
clarando ess amiga d
cual se situ
u el prototiipo de dichaa funcin.
Nombre_de
e_la_funcio
on: Es el no
ombre de la
a funcin.
Se
S pueden utilizar
u casi todas las lletras del alfabeto, exccepto la .
Se
S pueden utilizar
u los nmeros
n de
el 0 al 9.
No se
s pueden utilizar cara acteres esppeciales (puuntos, commas, signos de admiraccin o
de in
nterrogacin, etc.,) el nico carccter que es aceptado e es el guin bajo ( _ ).
El nombre de unau funcin n amiga see puede forrmar con n meros y le etras pero no se
puedde iniciar co
on un nme ero.
No se
s pueden utilizar com mo nombres de una fu uncin amig ga las palaabras reservvadas
que usa el com mpilador, poor ejemplo: for, main, d
do, while, etc.
El Lenguaje
L C++
C distinguue entre maysculas
m y minscu ulas. Por loo tanto: no ombre,
Nommbre y NOM MBRE, son tres nombrres de funciones amig gas distintass.
Los nombres de las funcio ones amigaas deben se er cadenass de caracte eres, es deccir, un
car
cter despus de otro sin espacio os entre ello
os.
( ); (Paren
ntesis de ap
perura y Pa
arentesis de cierre)
Nota: la de
efinicin de la funcin debe realiz
zarse desp
pus de la llave de cie
erre (con pu
unto y
coma };) de
e la clase de objetos.
A
Ahora quee conoces la forma en e que se declara u na funcin n amiga, se e te preseenta a
continuaci
n un cdig
go fuente enn l se enc
cuentra la d
declaracin y definicin
n de una fuuncin
amiga de la
a clase de objetos llam
mada HIBR RIDO, el traabajo de la funcin ammiga es alte
erar el
contenido que almac cena uno ded los atributos de la clase de
erivada llam
mada HIBR
RIDO,
A
Analzalo detalladame
d ente y recue
erda que lo
o debes rea
alizar.
Da clic en el
e siguiente
e vnculo pa
ara que pue
edas ver ell programa::
PDF 10
Explicacin
n:
En el cdig
go fuente que acabas de descarg gar y analizzar, se decllaran dos cclases de objetos
que servir
n de clasess base para
a una clase
e derivada lllamada HIB BRIDO, el nombre de estas
d
dos clasess de objetoos son: AUTTOMATICO O y MANU AL la decclaracin y definicin de la
primera cla
ase es la sig
guiente:
Esta clase de objeto os se llama a CAMBIO_ _MANUAL , posee un n argumen nto de tipo short
llamado v declarado de tipo prrivado. Esta clase de e objetos ccuenta con un constrructor,
mismo que e inicia al atributo
a llam
mado v con n el valor ccero, ademms cuentaa con un mmtodo
llamado CAMBIO_MA
C ANUAL() mismo
m que es de de ttipo void (n
no regresa ningn valo
or) en
este mtoddo se escribbieron las lneas de c
digo que d
definen el comportamie ento de una
a caja
d
de velocida
ades (manu ual) de un automvil.
a
A continuac
cin se te muestra
m el proceso dee herencia mmltiple aplicado a la clase de objetos
llamada HIBRIDO, es decir la deerivacin de
e la clase n
nombrada a anteriormen nte a partir d
de las
clases de objetos
o llam
madas MAN NUAL y CA AMBIO_AUT TOMATICO O.
Para declarar (escribir) el prototipo de esta funcin es necesario escribir antes del tipo
o de la
ffuncin la palabra resservada frieend esto le
e indicar a
al compilad dor que se est decla arando
una funcin amiga. Esta
E funci
n es de tipo void (n no regresa a ningn vaalor) y entre los
parntesis (en donde se declara an los argumentos) se e le escribi
el nombrre de la cla
ase de
oobjetos de la cual es amiga,
a en este
e ejemplo se escrib
bi el nombre de la cla
ase HIBRID DO.
El siguiente
e ejecutable muestra el resultad
do de editarr, depurar y compilar el cdigo ffuente
completo de
d este pro ograma esc crito en Len
nguaje C+++ da clic en el siguiente vnculo
o para
que se desspliegue el programa:
p
Ejecutable 10.
A
Actividad de
d aprendizaje 8. Funciones am
migas o ene
emigas?
A
Ahora que e conoces la forma en que el e Lenguaje e de prog gramacin C++ perm mite al
programador declararr y definir una funcin amiga de e una classe de objettos ya exisstente,
realiza la siguiente
s ac
ctividad de
e aprendiza
aje, la cual tiene por o
objetivo qu
ue practiquees las
declaracin, definicin e implementacin de una funcin amiga, mecanismo provisto por el
Lenguaje de programacin C++
Instrucciones:
1 Edita el cdigo fuente del programa que acabas de realizar, y aade las lneas de
cdigo necesarias para modificar los tres atributos con los que cuenta la clase de
objetos derivada llamada HIBRIDO, incluyendo a los atributos derivados.
Los atributos con los que cuenta la clase HIBRIDO son los siguientes:
v
V
ESTADO
2 Depura y compila el cdigo fuente completo resultante y explica
detalladamente en cada una de las lneas de cdigo el funcionamiento de las
mismas.
3 Debes enviar tu archivo hasta que haya sido compilado, es decir que Dev
C++ no te haya marcado error, de lo contrario no se tomar esta actividad
como vlida. El archivo que debes subir a la plataforma es el cdigo fuente,
es decir el archivo con extensin .cpp que se realiz.
4 Recuerda que si tienes dudas puedes acudir con tu asesor(a), el(ella) te
apoyar con mucho gusto y aclarar tus dudas.
5 Cuando tengas listo tu archivo gurdalo en tu PC y envalo con tus datos en el
siguiente formato: apellidopaterno_materno_nombre_actividadnumero
Conclusin.
Terminaste la Unidad II