Duda con las clases [c++]

Iniciado por Lotux5, 19 Abril 2013, 18:49 PM

0 Miembros y 2 Visitantes están viendo este tema.

Lotux5

¿como uso una funcion de una clase dentro de otra?

naderST

Depende, si el método es estático lo llamas como una función sino debes crear una instancia de la clase y llamarlo.

Lotux5

Lo siento pero no te entiendo -.-". Por ejemplo: como introduciria la funcion int VectorDinamico :: Ncasillas(void){  return(numcasillas); } en otro metodo de la clase?


rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Lotux5

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);
}



Lotux5

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"?

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Lotux5

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.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Lotux5

Perdon, me equivoque al copiarlo, "n = NCasillas();" pero aun asi tampoco me funciona. Ese es mi problema.