Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Lotux5 en 19 Abril 2013, 18:49 PM

Título: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 18:49 PM
¿como uso una funcion de una clase dentro de otra?
Título: Re: Duda con las clases [c++]
Publicado por: naderST en 19 Abril 2013, 19:09 PM
Depende, si el método es estático lo llamas como una función sino debes crear una instancia de la clase y llamarlo.
Título: Re: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 19:49 PM
Lo siento pero no te entiendo -.-". Por ejemplo: como introduciria la funcion int VectorDinamico :: Ncasillas(void){  return(numcasillas); } en otro metodo de la clase?

Título: Re: Duda con las clases [c++]
Publicado por: rir3760 en 19 Abril 2013, 20:04 PM
Como ya te comento naderST solo debes llamar a la funcion si es parte de la misma clase o, si se trata de una clase distinta, crear un objeto y en base a este llamar a la funcion.

Para el caso concreto que mencionas aplica lo primero, mas o menos asi:
Código (cpp) [Seleccionar]

class VectorDinamico {
   public:
      int Ncasillas();
      int Ncasillas2();
   private:
      int numcasillas;
};

int VectorDinamico::Ncasillas(){
   return numcasillas;
}

int VectorDinamico::Ncasillas2()
{
   return Ncasillas();
}


Un saludo
Título: Re: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 20:10 PM
Eso no tiene sentido ya que tengo el doble de lo mismo y me quedo con la duda de como introducir ese metodo dentro de otro diferente (dento de la misma clase) aqui de mi clase:


Código (cpp) [Seleccionar]
#ifndef VECTORDINAMICO
#define VECTORDINAMICO

#include <iostream>
using namespace std;

class VectorDinamico {
private:
double * vector;
int numcasillas;

public:
VectorDinamico (void);
VectorDinamico (int ncasillas);
VectorDinamico (int ncasillas, double valor);
~VectorDinamico (void);
bool EstaVacio (int ncasillas);
int NCasillas (void);
void EscribirValor (double valor, int posicion);
void LeerValor (int posicion);
void EscribirVector (int ncasillas);
void RedimensionarVector (int ncasillas);
void PintaVector(int ncasillas);

};

#endif



Código (cpp) [Seleccionar]
#include <iostream>
#include "VectorDinamico.h"

using namespace std;

VectorDinamico :: VectorDinamico (void){

vector = new double [10];

for (int i=0; i<10; i++)
vector[i]=0;

}

VectorDinamico :: VectorDinamico (int ncasillas){

numcasillas=ncasillas;
vector = new double [numcasillas];

for (int i=0; i<numcasillas; i++)
vector[i]=0;

}

VectorDinamico :: VectorDinamico (int ncasillas, double valor){

ncasillas=numcasillas;
vector = new double [numcasillas];

for (int i=0; i<numcasillas; i++)
vector[i]=valor;

}

VectorDinamico :: ~VectorDinamico (void){

delete [] vector;

}

int VectorDinamico :: NCasillas (void){

return (numcasillas);
}

void VectorDinamico :: EscribirValor (double valor, int posicion){

vector[posicion]=valor;

}

void VectorDinamico :: LeerValor (int posicion){

cout << vector[posicion] << endl;

}

void VectorDinamico :: EscribirVector (int ncasillas){
double valor;
for (int i=0; i<ncasillas; i++){
cout << "Introduce un valor: ";
cin >> valor;
vector[i] = valor;
}
}

void VectorDinamico :: PintaVector(int ncasillas){
for (int i=0;i<ncasillas;i++)
cout << vector[i] << endl;



}

bool VectorDinamico :: EstaVacio (int ncasillas){

for (int i=0; i<ncasillas; i++)
if (vector[i]!=0)
return (false);

return (true);
}


Título: Re: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 20:14 PM
A ver, por si todavia no que da clara mi duda, en resumidas cuentas seria ¿"COMO llamar a un metodo dentro de otro de la misma clase"?
Título: Re: Duda con las clases [c++]
Publicado por: rir3760 en 19 Abril 2013, 20:32 PM
Cita de: Lotux5 en 19 Abril 2013, 20:14 PM¿"COMO llamar a un metodo dentro de otro de la misma clase"?
Pues honestamente me estoy quedando sin formas de explicarlo.

Intento con un ejemplo donde una función miembro llama a otra:
Código (cpp) [Seleccionar]

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

class foo {
   public:
      int uno();
      int dos();
};

int foo::uno()
{
   return 1;
}

int foo::dos()
{
   return uno() + 1;
}

int main()
{
   foo test;
   
   cout << test.uno() << endl;
   cout << test.dos() << endl;
   
   return 0;
}


Un saludo
Título: Re: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 20:51 PM
Gracias por las molestias, pero yo no se si yo soy muy tonto o no nos estamos entendiendo bien. xD

Yo lo que quiero es una cosa asi.

int VectorDinamico :: NCasillas (void)
{
        return (numcasillas);
}

Y despues con esta funcion usar algo asi:
void VectorDinamico :: PintaVector (void)
{
       int n = NCasillas (void);
       for (int i=0; i<n; i++)
                  cout << vector << endl;
}

Pero la parte de int n = NCasillas(void) no me funciona y tambien he probado n = this->N y tampoco y esa es mi duda como usar la funcion de arriba para usarla en el metodo de abajo.
Título: Re: Duda con las clases [c++]
Publicado por: rir3760 en 19 Abril 2013, 21:12 PM
Cita de: Lotux5 en 19 Abril 2013, 20:51 PMPero la parte de int n = NCasillas(void) no me funciona
Y no debe funcionar ya que es un error. Cuando se llama a una función que no recibe argumentos se utilizan los paréntesis vacíos.

El uso de void es necesario en el lenguaje C en la declaración y definición de una función pero no en los usos de (llamadas a) esta.

En el caso de C++ el uso de void no es necesario y no se recomienda.

Si tomo tu programa y la definición de la función "PintaVector" la sustituyo por esta:
Código (cpp) [Seleccionar]
void VectorDinamico::PintaVector(void)
{
   int n = NCasillas();
   
   for (int i=0; i<n; i++)
      cout << vector << endl;
}

Compila sin problemas.

Un saludo
Título: Re: Duda con las clases [c++]
Publicado por: Lotux5 en 19 Abril 2013, 21:33 PM
Perdon, me equivoque al copiarlo, "n = NCasillas();" pero aun asi tampoco me funciona. Ese es mi problema.
Título: Re: Duda con las clases [c++]
Publicado por: 85 en 20 Abril 2013, 02:19 AM
Cuando se crea un objeto del tipo de una clase B, dentro de una clase A (objeto miembro), eso se llama composición. lo decía porque desde el objeto se pueden usar métodos de la clase B en A. También se pueden crear objetos de B dentro de los mismos métodos de A. Bueno era un comentario XD

un ejemplo
http://codigomaldito.blogspot.com.ar/2005/12/composicin-objetos-miembro.html
Título: Re: Duda con las clases [c++]
Publicado por: rir3760 en 20 Abril 2013, 02:29 AM
Cita de: Lotux5 en 19 Abril 2013, 21:33 PMme equivoque al copiarlo, "n = NCasillas();" pero aun asi tampoco me funciona.
Con solo eso es difícil ayudarte. Mejor indica porque no te funciona y publica un programa de ejemplo donde se manifieste el problema.

Un saludo