Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cosas del C++

Iniciado por Haddd, 13 de Noviembre de 2002, 07:33:27 PM

« anterior - próximo »

ethernet

si, se para q vale friend, pero me refiero q para acceder a las variables privadas de algo tienes q saber cual es ese algo xD. tienes q pasarle una instancia al objeto el cual quieres modificar.

En el caso de los operadores  tiene su explicacion y viene en casi todos los tutoriales de c++.

re:PDD: haddd pone como  publicas un monton de variables en su motor, si no miralo tu mismo en los .h.
PDDD:(como haDDD) recomiendo la lectura de effective c++ y more EC++
saludos

synchrnzr

                                Coño, en lo de la instancia me has pillado por los cojones :o

Vale, ya está, esta es mi última oferta :P

class CVideo
{
   unsigned int ancho,alto;

   class CRender {
      void Render();
      void RenderToSurface();
      void Clear();
   };

   class CInicializacion {
      void Inicializar();
      void AjustarTamanoVentana();
      void EstablecerFullScreen();
   };
};

Garantizo que esto tiene que ser compilable (si no me suicido ya XDDD) y además se puede hacer eso tan feo de:

CVideo::CInicializacion::Inicializar()
{
   while(TRUE)
   printf("Como os rallais peñaaaaaaaaa!!!n");
}

Antes lo he puesto todo un poco sin pensar, mirando como lo tenía hecho en mi motor... pero no contaba que en mi caso estoy sujeto a circunstancias especiales, sorry ^_^'

Sync

PD: Pero no me negareis que no era tan difícil :D                                

Haddd

                                Es decir sync, que si utilizo class en lugar de struct sí debería poder hacerlo, es decir, poder acceder a las variables de la clase Video. Bien, lo probaré. También he visto cosas utilizando namespace, pero no lo he probado.

Respecto a mis conocimientos de C++, os diré que las versiones anteriores de mi motor sí definían correctamente las variables privadas, en lugar de tenerlas todas públicas. Es mucho más elegante y mucho más correcto. Sin embargo te obliga a tener un motón de funciones para recoger/modificar los valores, y es algo que llegué a odiar, precisamente por que la estructura de la clase me quedaba muy heavy. Si consigo estructurar las funciones dentro de la clase, entonces puedo volver a replantearme utilizar variables privadas.                                

synchrnzr

                                Pon privadas las que tengan que serlo y públicas las que no, es lo suyo :D

La verdad, yo cuando hago pruebas también las pongo todas públicas de entrada y luego ya pongo privadas las que tienen que serlo. No sé, no creo que sea un crimen :oops:

Sync                                

ethernet

Mi ultima solucion q es una parte de la de sync:

class CVideo;

class CRender {
CRender(CVideo &v): m_vid(v) {}
void Render();
void RenderToSurface();
void Clear();
private:
CVideo &m_vid;
}

class CInicializacion {
//constructi igual q CRender
void Inicializar();
void AjustarTamañoVentana();
void EstablecerFullScreen();
}

class CVideo
{
public:
friend class CRender;
friend class CInicializacion;

CVideo(): Inicializacion(*this),Render(*this){...}
CInicializacion Inicializacion;
CRender Render;

private:
word ancho,alto;

}

asi CRender pueden acceder a las variables de CVideo con la instancia q se les pasara.

saludos

ethernet

Sin embargo pienso q declarar las variables de CVideo como static adelantarias mucho mas, ademas segun tienes en tu motor puesto el video (en el q solo hay una instacia a ese objeto) es muy logico ponerla static ;)
saludos

synchrnzr

                                ethernet, estás usando friend, eres un vendido X'DDD

Sync                                

Haddd

                                Gracias por la ayuda, pero no es esto lo que quiero. Sí funcionaría, pero me complica el código y es algo que no quiero hacer. La verdad es que lo lógico es que una clase definida dentro de otra clase debería heredar sus variables, pero no es así.

En fin, a ver si alguien nos sorprende con una opción mágica!                                

synchrnzr

                                Haddd: déjate de mariconadas y pon el ancho y alto de la pantalla como variables globales de tu DLL X'DDD

Sync

PD: Lo importante es que funcione ¿no? :loco:
PPD: Al final me enfadaré y pillaré el compilador :X9:                                

ethernet

sync mi solucion es la de usar static pero esa ya la di antes, no soy un vendido xDDDD.
Yo creo q una cosa bien contruida no deberia dar esos problemas, aunue yo creo q esta claro como esta (lo digo por el motor) son cosas del dracula q se emparanoia. :)

saludos

synchrnzr

                               
CitarYo creo q una cosa bien contruida no deberia dar esos problemas, aunue yo creo q esta claro como esta (lo digo por el motor) son cosas del dracula q se emparanoia. :)

En esto estoy un 100% de acuerdo contigo :X9:

Sync                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.