gpt4 book ai didi

C++ 多重继承(菱形方案)范式

转载 作者:行者123 更新时间:2023-11-28 08:14:04 28 4
gpt4 key购买 nike

我在多重继承菱形方案下组织了 4 个类。

             BASE
/ \
/ \
Deriv1 Deriv2
\ /
\ /
Final

每个类都有“ShowXXXX()”方法(例如),其中“XXXX”是类的名称。

当我调用“ob.ShowFinal()”方法时,它会打印:

  • Final 的字段,
  • Deriv1 的字段,
  • 基地的领域,
  • Deriv2 的字段,
  • 基地的领域

问题 是我想逃避第二次打印 Base 的字段。但是,有一个范例:因为当我调用“ob.ShowDeriv2()”时,它应该被打印出来:

  • Deriv2 的字段,
  • 基地的领域

当我调用“ob.ShowDeriv1()”时,它应该被打印出来:

  • Deriv1 的字段,
  • 基地的领域

我的代码:

// 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();
}

谢谢你的帮助!

最佳答案

您的问题几乎没有限制,所以这应该可行。

将 Intermediate1(和 2)中的声明更改为

public:
void ShowIntermediate1(bool printBase = true);

在实现中:

...
if (printBase)
ShowBase();

然后在 ShowFinal() 中:

ShowIntermediate1(true);
ShowIntermediate2(false);

关于C++ 多重继承(菱形方案)范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224059/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com