Ver Mensaje Individual
  #8 (permalink)  
Antiguo 15/06/2008, 09:05
shacklebolt
 
Fecha de Ingreso: junio-2008
Mensajes: 10
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Ayuda con Funciones objeto (funtores)

Por si ayuda pongo también la clase pokemon pero ya dije que no tiene ningún problema ya está compilado y comprobado con un main, pero igual os sirve de ayuda.

pokemon.h
Código:
#include <iostream>
#include <string>
#include <utility>

using namespace std;

#ifndef _POKEMON_H
#define _POKEMON_H

class pokemon {
public:
	pokemon();
	pokemon(const int, const string, const string, const string="");

	// Observadores
	int dame_numero() const;
	string dame_nombre() const;
	pair<string,string> dame_tipos() const;

	// Modificadores de campo
	void mete_numero(const int);
	void mete_nombre(const string);
	void mete_tipos(const pair<string,string>);

private:
	int numero;
	string nombre;
	pair<string,string> tipos;
};

// Operadores de lectura y escritura
istream & operator >> (istream & , pokemon & );
ostream & operator << (ostream & , const pokemon & );

// Operador <
bool operator < (const pokemon &, const pokemon &);
pokemon.cc
Código:
#include <pokemon.h>
#include <fstream>

pokemon::pokemon() : numero(-1), nombre(""), tipos("","") {}

pokemon::pokemon(const int num, string nom, const string t1, const string t2) 
	: numero(num), nombre(nom), tipos(t1,t2) {}

int pokemon::dame_numero() const {
	return numero;
} 

string pokemon::dame_nombre() const {
	return nombre;
} 

pair<string,string> pokemon::dame_tipos() const {
	return tipos;
}

void pokemon::mete_numero(const int num) {
	numero=num;
} 

void pokemon::mete_nombre(const string nom) {
	nombre=nom;
} 

void pokemon::mete_tipos(const pair<string,string> tps) {
	tipos=tps;
}

istream & operator >> (istream & in, pokemon & p) {
	int num,ntipos;
	string nom,t1,t2;
	in>>num;
	in>>nom;
	in>>ntipos;
	if ( ntipos == 2 ) {
	in>>t1;
	in>>t2;
	}
	else{
	in>>t1;
	t2="";
	}
	pokemon aux(num,nom,t1,t2);
	p=aux;
	return in;	
}

ostream & operator << (ostream & out, const pokemon & p) {
	out<<p.dame_numero()<<"\t"<<p.dame_nombre()<<"\t";

	if ( p.dame_tipos().second == "") {
		out<<"1\t"<<p.dame_tipos().first;
	}
	else {
		out<<"2\t"<<p.dame_tipos().first<<"\t"<<p.dame_tipos().second;
	}
	return out;
}

bool operator < (const pokemon & pok1, const pokemon &pok2) {
	if(pok1.dame_numero()<pok2.dame_numero()) return true;
	else return false;
}
#endif
editado: YA FUNCIONA!!

Última edición por shacklebolt; 16/06/2008 a las 02:30