• Forum
  • Jobs
  • how can i use class programming c++

 
how can i use class programming c++


Puerta.hpp

#ifndef _PUERTA_
#define _PUERTA_

#define ND (7)
#include <string>

class Puerta {

protected:
static int _numSerie;
int _id;

public:
Puerta();
virtual int salida() = 0;
virtual int getId() = 0;
virtual std::string toString(int nivel = 0) = 0;

};

#endif


Puerta cpp

#include "Puerta.hpp"

int Puerta::_numSerie = 2; //Inicializamos


Puerta::Puerta() {

_id = _numSerie;
_numSerie+=2;

}

fijo hpp

#ifndef _FIJO_
#define _FIJO_

#include "Puerta.hpp"

class Fijo : public Puerta {

protected:
int _estado = ND;

public:
int salida();
int getId();
std::string toString(int nivel = 0);
void pon1();
void pon0();

};

std::ostream& operator<< (std::ostream& os, Fijo& m);

#endif

fijo cpp

#include "Fijo.hpp"

void Fijo::pon1(){

_estado = 1;
}
void Fijo::pon0(){

_estado = 0;
}

int Fijo::salida(){

return _estado;
}

int Fijo::getId(){

return _id;
}

std::string Fijo::toString(int nivel){

std::string respuesta;
std::string espacios(nivel*4, ' ');

respuesta = espacios + "Fijo id=" + std::to_string(getId() ) + " salida="
+ std::to_string(salida() ) + "\n";

return respuesta;

}

std::ostream& operator<< (std::ostream& os, Fijo& m){

os << m.toString(0);
return os;
}


conectar puerta hpp

#ifndef _CONECTARENTRADAS_
#define _CONECTARENTRADAS_

//Hija directa de PUerta por lo cual:
#include "Puerta.hpp"

class ConectarEntradas : public Puerta {

protected:
//Mediante punteros:

Puerta* _ptE1 = nullptr;
Puerta* _ptE2 = nullptr;
Puerta* _ptE3 = nullptr;

public:

void conecta1(Puerta *pt);
void conecta2(Puerta *pt);
void conecta3(Puerta *pt);
};

#endif

conectar entradas cpp

#include "ConectarEntradas.hpp"

void ConectarEntradas::conecta1(Puerta *pt){

_ptE1 = pt;
}

void ConectarEntradas::conecta2(Puerta *pt){

_ptE2 = pt;
}

void ConectarEntradas::conecta3(Puerta *pt){

_ptE3 = pt;
}

NANDM hpp

#ifndef _NAND_
#define _NAND_

//Hija directa de ConectarEntradas:
#include "ConectarEntradas.hpp"

class Nand : public ConectarEntradas {

public:

int salida();
int getId();
std::string toString(int nivel = 0);

};

std::ostream& operator<< (std::ostream& os, Nand& m);

#endif


nand cpp

#include "Nand.hpp"
#include <sstream>

int Nand::salida(){

//Cuando alguna de sus entradas no esté conectda devuelve ND:
if(_ptE1 == nullptr || _ptE2 == nullptr || _ptE3 == nullptr){
return ND;
}

//Si alguna de las entradas tiene valor ND, devolver ND pero antes
//debemos recoger lo que llega a dicha entrada:

int vEntradaNand1 = _ptE1 -> salida();
int vEntradaNand2 = _ptE2 -> salida();
int vEntradaNand3 = _ptE3 -> salida();

if(vEntradaNand1 == ND || vEntradaNand2 == ND || vEntradaNand3 == ND){
return ND;
}

//Operación lógica NAND 2 entradas -> And negada:

if((vEntradaNand1) == 1 && (vEntradaNand2 == 1) && vEntradaNand3 == 1){
return 0;
}else{
return 1;
}


}

int Nand::getId(){

return _id;
}

std::string Nand::toString(int nivel ){

std::ostringstream oss;
std::string espacios(nivel*4, ' ');

oss << espacios << "Nand id=" << getId() << " salida=" << salida()
<< "\n";

//Entradas y tenemos en cuenta si hay alguna mal conectada:

if(_ptE1 == nullptr){
oss << espacios << " NO CONECTADA\n";
}else{
oss << espacios << _ptE1 ->toString(1);
}


if(_ptE2 == nullptr){
oss << espacios << " NO CONECTADA\n";
}else{

oss << espacios << _ptE2 ->toString(1);
}

if(_ptE3 == nullptr){
oss << espacios << " NO CONECTADA\n";
}else{
oss << espacios << _ptE3 ->toString(1);
}


return oss.str();
}

std::ostream& operator<< (std::ostream& os, Nand& m){

os << m.toString(0);
return os;
}




Topic archived. No new replies allowed.