wielokrotne dziedziczenie

0

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

0

a gdzie "and::" przed definicją wynik?

0

fakt, coś tak pusto było ^^. Śmiga aż miło (jeszcze niepotrzebne były deklaracje konstruktora i destruktora w funkcjach abstrakcyjnych, ale na to sam zdążyłem wpaść). Dziękuję i pozdrawiam

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

OMGWTF ;-)

lepiej tak:

bool wynik8(bool a,bool b,bool c,bool d,bool e,bool f,bool g,bool h)
{
  return a && b && c && d && e && f && g && h;
}
0

Nie lepiej jako argument przysyłać tablicę boolów oraz ich ilość? ;)

0

To już prędzej unię ośmiu booli i long longa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1