У меня 4 класса, организованных по ромбовидной схеме множественного наследования.
BASE
/ \
/ \
Deriv1 Deriv2
\ /
\ /
Final
У меня есть для каждого класса методы «ShowXXXX ()» (например), где «XXXX» - это имя класса.
Когда я вызываю метод "ob.ShowFinal()
", он печатает:
- поля Финала,
- поля Deriv1,
- Поля базы,
- поля Deriv2,
- Поля базы
Проблема в том, что я хочу избежать печати полей Base во второй раз.
Но есть парадигма: потому что когда я звоню "ob.ShowDeriv2()
", это должно быть напечатано:
и когда я звоню "ob.ShowDeriv1()
", это должно быть напечатано:
Мой код:
// multipleInheritance.cpp : Defines the entry point for the console application.
//
//Summary:
//
// Mmb - member
// Prm - parameter
// b - Base
// i1, i2 - Intermediate1, Intermediate2
// f - final
class Base
{
int bMmb;
public:
Base(int);
void ShowBase();
};
Base::Base (int bPrm)
{
bMmb = bPrm;
}
void Base::ShowBase()
{
cout << "Showing Base fields" << endl;
cout << "bMmb = " << bMmb << endl;
cout << "----------------------------" << endl << endl;
}
class Intermediate1 : public Base
{
int i1Mmb;
public:
Intermediate1(int, int);
void ShowIntermediate1();
};
Intermediate1::Intermediate1(int bPrm, int i1Prm):Base(bPrm)
{
i1Mmb = i1Prm;
}
void Intermediate1::ShowIntermediate1()
{
cout << "Showing Intermediate1 fields" << endl;
cout << "i1Mmb = " << i1Mmb << endl;
ShowBase();
}
class Intermediate2 : public Base
{
int i2Mmb;
public:
Intermediate2(int, int);
void ShowIntermediate2();
};
Intermediate2::Intermediate2(int bPrm, int i2Prm):Base(bPrm)
{
i2Mmb = i2Prm;
}
void Intermediate2::ShowIntermediate2()
{
cout << "Showing Intermediate2 fields" << endl;
cout << "i2Mmb = " << i2Mmb << endl;
ShowBase();
}
class Final : public Intermediate1, public Intermediate2
{
int fMmb;
public:
Final(int, int, int, int);
void ShowFinal();
};
Final::Final(int bPrm, int i1Prm, int i2Prm, int fPrm): Intermediate1(bPrm, i1Prm), Intermediate2(bPrm, i2Prm)
{
fMmb = fPrm;
}
void Final::ShowFinal()
{
cout << "Showing Final fields" << endl;
cout << "fMmb = " << fMmb << endl;
ShowIntermediate1();
ShowIntermediate2();
}
void main()
{
Base t(1);
t.ShowBase();
Intermediate1 u1(2, 31);
u1.ShowIntermediate1();
Intermediate2 u2(4, 51);
u2.ShowIntermediate2();
Final v(6, 71, 72, 8);
v.ShowFinal();
}
Спасибо за помощь!