mọi người cho em hỏi sai đâu vậy?
code em đây
http://codepad.org/ftNYPMn3
#include <string>
#include <iostream>
using namespace std;
class NhomMau
{
protected:
string ten;
string Nmau;
bool Rh;
public:
void GetNmau(string& i);
bool GetRh();
void Xuat();
void Nhap();
virtual bool KtDiTruyen(NhomMau a, NhomMau b);
virtual bool ChoMau(NhomMau a);
};
class NhomMauO :public NhomMau
{
public:
bool KtDiTruyen(NhomMau a, NhomMau b);
bool ChoMau(NhomMau a);
};
class NhomMauA :public NhomMau
{
public:
bool KtDiTruyen(NhomMau a, NhomMau b);
bool ChoMau(NhomMau a);
};
class NhomMauB :public NhomMau
{
public:
bool KtDiTruyen(NhomMau a, NhomMau b);
bool ChoMau(NhomMau a);
};
class NhomMauAB :public NhomMau
{
public:
bool KtDiTruyen(NhomMau a, NhomMau b);
bool ChoMau(NhomMau a);
};
class MangNhomMau
{
private:
NhomMau *arr[50];
int N;
int loai;
public:
void ChoMau();
void KtDiTruyen();
friend istream& operator>>(istream& is, MangNhomMau &x);
~MangNhomMau()
{
for(int i=0;i<N;i++)
delete arr[i];
}
};
void NhomMau::Nhap()
{
cin.ignore();
cout << "Nhap ten:";
getline(cin, ten);
cout<<"Nhom mau: "<<Nmau;
cout << "Nhom Rh(duong la 1, am la 0):";
cin >> Rh;
}
void NhomMau::Xuat()
{
cout << "Ho ten: " << ten << endl;
cout << "Nhom mau: " << Nmau << endl;
if (Rh == 1) cout << "Nhom Rh+" << endl;
else cout << "Nhom Rh-" << endl;
}
bool NhomMau::GetRh()
{
return Rh;
}
void NhomMau::GetNmau(string& i)
{
i=Nmau;
}
bool NhomMauO::KtDiTruyen(NhomMau a, NhomMau b)
{
string e,f;
a.GetNmau(e);
b.GetNmau(f);
if(e=="AB" || f=="AB") return false;
return true;
}
bool NhomMauA::KtDiTruyen(NhomMau a, NhomMau b)
{
string e,f;
a.GetNmau(e);
b.GetNmau(f);
if((e=="B" && f=="B") || (e=="O" && f=="O") || (e=="O" && f=="B") ||(e=="B" && f=="O") )return false;
return true;
}
bool NhomMauB::KtDiTruyen(NhomMau a, NhomMau b)
{
string e,f;
a.GetNmau(e);
b.GetNmau(f);
if((e=="A" && f=="A") || (e=="O" && f=="O") || (e=="O" && f=="A") ||(e=="A" && f=="O")) return false;
return true;
}
bool NhomMauAB::KtDiTruyen(NhomMau a, NhomMau b)
{
string e,f;
a.GetNmau(e);
b.GetNmau(f);
if(e=="O"|| f=="O") return false;
if((e=="A" && f=="A") || (e=="B" && f=="B")) return false;
return true;
}
bool NhomMauO::ChoMau(NhomMau a)
{
string e;
a.GetNmau(e);
if(Rh==false)
{
if(a.GetRh()==true) return false;
else if(e!="O") return false;
else return true;
}
else if(e!="O") return false;
else return true;
}
bool NhomMauA::ChoMau(NhomMau a)
{
string e;
a.GetNmau(e);
if(Rh==false)
{
if(a.GetRh()==true) return false;
else if(e!="O" && e!="A") return false;
else return true;
}
else if(e!="O" && e!="A") return false;
else return true;
}
bool NhomMauB::ChoMau(NhomMau a)
{
string e;
a.GetNmau(e);
if(Rh==false)
{
if(a.GetRh()==true) return false;
else if(e!="O" && e!="B") return false;
else return true;
}
else if(e!="O" && e!="B") return false;
else return true;
}
bool NhomMauAB::ChoMau(NhomMau a)
{
string e;
if(Rh==false)
{
if(a.GetRh()==true) return false;
else return true;
}
else return true;
}
istream& operator>>(istream& is, MangNhomMau &x)
{
cout<<"Nhap so luong nguoi la: ";
is>>x.N;
for(int i=0;i<x.N;i++)
{
cout<<"Nhap loai nhom mau la: ";
is>>x.loai;
switch(x.loai)
{
case 1: x.arr[i] = new NhomMauO();
break;
case 2: x.arr[i] = new NhomMauA();
break;
case 3: x.arr[i] = new NhomMauB();
break;
case 4: x.arr[i] = new NhomMauAB();
break;
}
x.arr[i]->Nhap();
}
return is;
}
void MangNhomMau::ChoMau()
{
int t;
cout<<"nhap vi tri nguoi can mau:";
cin>>t;
cout<<"nhung nguoi cho mau duoc nam o vi tri so:";
for(int i=0;i<N;i++)
{
if(arr[t]->ChoMau(*arr[i])==true) cout<<i+1<<" ";
}
cout<<endl;
}
void MangNhomMau::KtDiTruyen()
{
int e,f,g;
cout<<"nhap ba vi tri can la:";
cin>>e>>f>>g;
if((arr[e]->KtDiTruyen(*arr[f],*arr[g]))==true) cout<<"ba nhom mau co tinh di truyen."<<endl;
else cout<<"ba nhom mau ko co tinh di truyen."<<endl;
}
int main()
{
MangNhomMau a;
cin>>a;
a.KtDiTruyen();
a.ChoMau();
return 0;
}