Jueves 14 de Noviembre de 2024, 03:58
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
gramatica de clases en C++
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: gramatica de clases en C++ (Leído 3032 veces)
picyo
Visitante
gramatica de clases en C++
«
en:
Viernes 21 de Mayo de 2010, 17:00 »
0
vaya titulo..no sabia como resumir muy bien . Bueno voy directo. Yo he hecho java, y en este lenguaje, al llamar a una funcion, se llama primero a la clase, por ejemplo :
variableObjeto"x"=ClaseQueMeInvento.FunciónQueMeInvento();
Pues haciendo analogía con C++, veo, por ejemplo esto :
Código: C++
Console
::
ReadKey
(
)
Bien, no se explícitamente si Console es una clase en si, o un conjunto de clases. Pero lo que si que tengo claro es que se refiere a algo de clases, y es por eso que me hago una analogía entre "x.x" (java) y "x::x" ( C++).
Hasta aquí, fuera así o no fuera así, me lo creía y le daba explicación a esto. Pero... ahh he visto esta otra función :
Código: C++
while
(
keyPress.
Key
!
=
ConsoleKey
::
Escape
)
;
XConcretamente esto :
Código: C++
keyPress.
Key
!
=
ConsoleKey
::
Escape
)
;
Bien que pasa aqui?
Escape es un objeto de la clase Consolekey? Si es así, entonces pues Console::ReadKey() no debería tener forma de función..
keyPress es una función de la clase Key?
No tengo las idas muy claras acerca de la diferenciación entre "x.y" y " "x::y"
Tweet
pmike
Miembro activo
Mensajes: 62
Re: gramatica de clases en C++
«
Respuesta #1 en:
Sábado 22 de Mayo de 2010, 21:16 »
0
ConsoleKey::Escape
se entiende que Escape es un método de la clase ConsoleKey
keyPress.Key
es una tipo de dato llamado estructura por lo que accedemos al elemento Key de la estructura KeyPress
Es lo mismo prácticamente pero con diferente tipo de dato (estruct y class), y accedes a un determinado elemento.
-------------------------------------------------------------
http://www.ebookred.com
-------------------------------------------------------------
picyo
Visitante
Re: gramatica de clases en C++
«
Respuesta #2 en:
Domingo 23 de Mayo de 2010, 19:18 »
0
ahhh Ok. Claro, un struct, para acceder a él es a través del punto. ahora visto asi queda mas que claro... me habia "ofuscado" en tipos o clases, y bueno no habia pensado en el struct. Lo que harñe será ver cómo esta realizado ese struct y de que clase ( o tipo ) es el elemento key. Merci!
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: gramatica de clases en C++
«
Respuesta #3 en:
Lunes 24 de Mayo de 2010, 03:49 »
0
Buenas.
El . es tambien el operador miembro de las clases.
Por ejemplo si la interfase de la clase es una funcion y una variable, usarias
clase.funcion()
y
clase.variable
para llamar la funcion y obtener el valor de la variable.
Para entender bien el operador :: te sugiero que busques info de los espacios con nombre (namespace). Ya que es un operador de ambito, y no de miembro.
En
http://www.conclase.net
hay un manual en donde lo explican.
Saludos
The sweet smell of a great sorrow lies over the land.
picyo
Visitante
Re: gramatica de clases en C++
«
Respuesta #4 en:
Domingo 30 de Mayo de 2010, 18:10 »
0
Ok, entiendo que el operador "::" sólo dice la procedencia del espacio de la funcion o variable ( al decir variable seria mejor ya hablar de solo objeto?). Por ejemplo:
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
)
{
cout
<<
"Hola "
<<
endl
;
/////////// 1
std
::
cout
<<
" ¿ Que tal ?"
<<
endl
;
/////////// 2
En la nota 1 no hay operador, en la nota 2 si. Esto dice que la función cout deriva de ese namespace (std). Supongo que en ese namespace han puesto todos los nombres de las variables y/o funciones que se pueden usar, de distintas clases o librerías ( iostream es la clase o libreria a la que me refiero).
Entonces, gracias a que he definido ese espacio ("using namespace std;" ó "std::cout" ), el compilador entiende esa funcion. Pero, cúando, pues he de definir una clase ? es decir, por que en esta función :
Código: C++
keyPress.
Key
la "procedencia" la he de poner desde la clase keyPress desde el operador punto? Acaso no esta definida pues en ningún namespace? O de otro modo, por que no puedo prescindir de usar el namespace std y por ejemplo hacer la llamda de la funcion de este modo :
Código: C++
iostream.
cout
(
)
;
( que se que no entiende el compilador esto último)
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: gramatica de clases en C++
«
Respuesta #5 en:
Lunes 31 de Mayo de 2010, 20:05 »
0
El problema ahi, es que cout no es una funcion, es un objeto de tipo class ostream.
The sweet smell of a great sorrow lies over the land.
picyo
Visitante
Re: gramatica de clases en C++
«
Respuesta #6 en:
Lunes 31 de Mayo de 2010, 20:17 »
0
claro, ya entiendo !
se ve raro que un objeto sea usado como funcion ( al menos a mi me pareccia raro) por eso no asociaba. Bueno, voy avanzando
picyo
Visitante
Re: gramatica de clases en C++
«
Respuesta #7 en:
Martes 1 de Junio de 2010, 20:42 »
0
Bueno , he profundizado un poco mas. por ejemplo :
Código: C++
ConsoleKeyInfo KeyPress
;
KeyPress
=
Console
::
ReadKey
(
true
)
;
// ESTO ES A
while
(
keyPress.
key
!
=
ConsoleKey
::
Escape
)
{
// ESTO ES B y ESTO ES C
// (...)
}
return
0
;
ESTO ES A
Código: C++
public
:
static
ConsoleKeyInfo ReadKey
(
bool
intercept
)
ESTO ES B
Código: C++
public
enum
class
ConsoleKey
------------------------------------------
------------------------------------------
ejemplos
:
A Tecla A.
Add
Tecla Agregar.
Applications
Tecla Aplicación
(
Microsoft Natural Keyboard
)
.
(
...
)
ESTO ES C
Código: C++
public
:
ConsoleKeyInfo
(
wchar_t
keyChar,
ConsoleKey key,
bool
shift,
bool
alt,
bool
control
)
En ESTO ES A, hemos creado un objeto de la clase ConsolekeyInfo, y lo inicializamos mediante el método ReadKey, aunque este método no "lo tenemos" desde un objeto creado por nosotros, sinó que lo llamamos desde la "clase madre" .
Con eso he comprobado que no se igualan dos tipos distintos ( de ser contrario, hubiera habido que tener un conversor). Los dos tipos son tipo ConsoleKeyInfo. A la hora de llamar el método ReadKey(), se hace sin haber creado un objeto ( se usaría el "."). Entonces deberiamos hacer algo asi como " ConsoleKeyInfo.ReadKey", pero no es exactamente asi.
EN ESTO ES C, se ve que variables integran la clase ConsoleKeyInfo, una de ellas es key, tipo ConsoleKey ( ConsoleKey a su vez es un tipo enumerado, de todos los caracteres del teclado estándar).
Bien entonces, por que no se llama como he dicho antes (" ConsoleKeyInfo.ReadKey") ? Pues a mi modo de entender, cuando se quiere usar un método o objeto de una clase sin haber creado el objeto ( como en este caso KeyPress), se llama a la clase directamente, o se dice la procedencia, mejor dicho, pero no de la clase, sinó de donde esta esa clase. En este caso, nuestra clase ConsoleKeyInfo está dentro de lo que ( a mi, correjidme si no es correcto) una "super clase" o simplemente una librería que integra diferentes objetos, o métodos...
Entonces, con la funcion Readkey(true), activamos la deteccion de caracteres del teclado estándar, y se compara ese ( evento?) con la tecla Escape, que es un tipo ConsoleKey, dentro a su vez ( como variable integrada)del constructor de CosnoleKeyInfo.
La raíz de todo: podriamos decir que ralmente Console es una super clase donde dentro estan, por ejemplo, el objeto readKey?
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
gramatica de clases en C++