Zadanie, które muszę rozwiązać mówi o tym, aby zaprogramować bramki logiczne and,or,nand,nor,xor oraz inwerter not. Aby sprawdzić poprawność programu wprowadzić trzeba daną funkcję posiadającą 5 zmiennych typu logicznego oraz wyświetlić wynik. Zaleca się wprowadzenie funkcji, w której użyte są wszystkie bramki, każda bramka powinny ponadto mieć możliwość wprowadzenia doń: 2,3,4 lub 8 sygnałów wejściowych.
Pomyślałem że utworze 4 klasy abstrakcyjne: dwa,trzy,cztery oraz osiem. Ktore będą posiadały metody zwracające wynik i posiadające odpowiednią ilość argumentów. Po nich dziedziczyć będą klasy: and,or,nor,xor,nand oraz not.
Klasa cztery:
#ifndef cztery_h
#define cztery_h
class cztery: public bramka
{
public:
cztery();
~cztery();
virtual bool wynik4(bool,bool,bool,bool)=0;
};
#endif
pozostałe abstrakcyjne analogicznie
Klasa and:
header
#ifndef and_h
#define and_h
#include "dwa.h"
#include "trzy.h"
#include "cztery.h"
#include "osiem.h"
class and: public dwa, public trzy,public cztery,public osiem
{
public:
and();
~and();
bool wynik2(bool,bool);
bool wynik3(bool,bool,bool);
bool wynik4(bool,bool,bool,bool);
bool wynik8(bool,bool,bool,bool,bool,bool,bool,bool);
};
#endif
ciało
#include "and.h"
#include "dwa.h"
#include "trzy.h"
#include "cztery.h"
#include "osiem.h"
bool wynik2(bool a,bool b)
{
if(a==1 && b==1)
{
return 1;
}
else
{
return 0;
}
}
bool wynik3(bool a,bool b,bool c)
{
if(a==1 && b==1 && c==1)
{
return 1;
}
else
{
return 0;
}
}
bool wynik4(bool a,bool b,bool c,bool d)
{
if(a==1 && b==1 && c==1 && d==1)
{
return 1;
}
else
{
return 0;
}
}
bool wynik8(bool a,bool b,bool c,bool d,bool e,bool f,bool g,bool h)
{
if(a==1 && b==1 && c==1 && d==1 && e==1 && f==1 && g==1 && h==1)
{
return 1;
}
else
{
return 0;
}
}
pozostałe bramki analogicznie
Przy kompilacji wychodzą błędy linkera:
1>nand.obj : error LNK2005: "bool __cdecl wynik2(bool,bool)" (?wynik2@@YA_N_N0@Z) already defined in and.obj
Czy to oznacza, że nie mogę utworzyć koło siebie kilku różnych klas o tych samych nazwach metod czy można temu jakoś zaradzić?