[C++]Duda sobre clases

Iniciado por SrCooper, 12 Julio 2013, 15:04 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

Tengo el siguiente código:
Código (cpp) [Seleccionar]

class Clase1{
public:
    funcion1();
};

class Clase2{
public:
    funcion2();

};


En la declaración de la funcion2, se necesita llamar a funcion1, pero no he creado todavía ningún objeto de la clase1.
El problema se resume en la siguiente pregunta, ¿se pueden llamar a los métodos de una clase sin declarar ningún objeto de esta?

Aún no he creado ningún objeto porque primero estoy declarando todas las clases, las funciones, etc. y ya después en el main crearé los objetos necesarios. También he pensado en declarar un objeto de la clase1 para usarlo en la clase2 y después sobreescribirlo en el main, pero realmente me pierdo con las clases y no sé hacer esto. Alomejor estoy entendiendo mal el concepto de clase y resulta que no se puede hacer algo similar...

Un saludo y espero que me aclaréis este lío que tengo armado en mi cabeza  :P

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

SrCooper

Es que he estado mirando mucho código de otras personas para aprender y algunas usaban algo como esto:
Código (cpp) [Seleccionar]

clase1->funcion1()

Y llamaban así a la función. ¿Cómo se usa este símbolo ->?

Cita de: engelx en 12 Julio 2013, 15:09 PM
herencia

dejo un link que te puede servir

http://c.conclase.net/curso/?cap=036

Ya miré el link, pero no creo que esto resuelva mi problema, pues en mi caso, la clase1 y la clase2 son muy diferentes entre sí, una no puede ser heredada de la otra. A no ser que ambas fueran derivadas de otra, la Clase0, por ejemplo. ¿En este caso podría usar la funcion1 en la clase2?

Un saludo, y gracias por todo  :P

eferion

Una clase, como norma general, tiene esta forma:

Código (cpp) [Seleccionar]

class Clase
{
  public:
    // ...

  protected:
    // ...

  private:
    // ...
};


Los elementos que están en private son accesibles únicamente por la propia clase. Aquí suelen ir las variables internas de la clase.

Los elementos de la parte protected son accesibles por la propia clase y por las clases que hereden de ésta... para el resto no es información accesible.

Los elementos de la parte public son accesibles por todos.

Dicho esto, para acceder a cualquier miembro desde fuera de la clase tienes que utilizar bien el operador '.', bien el operador '->', dependiendo de si a la clase accedes de una forma estática o si es un puntero.

Código (cpp) [Seleccionar]

class Clase
{
  // ...

  public:
    void funcion( );

  // ...
};

Clase clase1;
Clase* puntero_clase1 = &clase1;

clase1.funcion( );
puntero_clase->funcion( );



eferion

No creo que sea necesario decir que para acceder a los miembros de una clase necesitas un objeto ya creado de esa clase... salvo que sea un miembro estático, pero ese no es tu caso.

SrCooper

Cita de: eferion en 12 Julio 2013, 20:09 PM
No creo que sea necesario decir que para acceder a los miembros de una clase necesitas un objeto ya creado de esa clase... salvo que sea un miembro estático, pero ese no es tu caso.

Vale, esa era mi duda, gracias :D

<<<-Basura->>>

Claro que se puede llamar un método de una clase sin tener que declararlo

Código (cpp) [Seleccionar]

class Clase1{
public:
    static void funcion1();
};

class Clase2{
public:
    void funcion2(){
Clase1::funcion1();
    }
};


Lo que tienes que hacer es declarar el método como static para poderlo invocar sin una instancia.
Código (cpp) [Seleccionar]
static void funcion1();

Y para poderlo llamar lo invocas de la siguiente manera:
Código (cpp) [Seleccionar]
Clase1::funcion1();
<<<--Basura-->>>

0xDani

Si no necesitas usar miembros de la clase en una función, puedes declararla como static, o si no puedes hacer que funcion2() tome como parámetro un objeto de la clase funcion1. También puedes incluir un objeto de la clase Clase1 como miembro de la clase Clase2.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

SrCooper

Cita de: 0xDani en 13 Julio 2013, 23:54 PM
Si no necesitas usar miembros de la clase en una función, puedes declararla como static, o si no puedes hacer que funcion2() tome como parámetro un objeto de la clase funcion1. También puedes incluir un objeto de la clase Clase1 como miembro de la clase Clase2.

Saludos.

Al final he hecho eso último. Un saludo y gracias  :laugh: