gpt4 book ai didi

c++ - 在没有多级继承的情况下通过 C++ 中的组合实现多态行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:47 24 4
gpt4 key购买 nike

我想通过组合实现多态行为,而不是多级继承。在下面的示例代码中,bluerectangle 派生自 rectangle,bluecircle 派生自 circle。所以问题是我可能在继承层次结构中具有相同的深度,所以工作是使用组合而不是多级继承来减少层次结构级别。我们可以在这里通过组合实现多态行为吗?如果是,那么这里需要遵循什么设计。目前我刚刚开始阅读设计模式,所以它似乎类似于桥接模式,但如果没有适当的指针就无法继续进行。

 #include<iostream>
using namespace std;
class shape
{
public:
virtual void draw()=0;
virtual ~shape(){}
};

class rectangle: public shape
{
public:
void draw()
{
cout<<"draw rectangle"<<endl;
}
};
class bluerectangle : public rectangle
{
public:
void draw()
{
cout<<"draw bluerectangle"<<endl;
}
};
class circle: public shape
{
public:
void draw()
{
cout<<"draw circle"<<endl;
}

};

class bluecircle : public circle
{
public:
void draw()
{
cout<<"draw bluecircle"<<endl;
}
};

int main()
{
shape *obj=new circle;
obj->draw();
obj=new rectangle;
obj->draw();
obj=new bluerectangle;
obj->draw();
obj=new bluecircle;
obj->draw();
delete obj;
return 1;
}

最佳答案

根据您在评论中的回答,这是一个经典的装饰器模式。

Decorator applied to OP's problem

要得到一个红色的矩形,你把它包裹起来:

Shape *obj=new RedDecorator(new Rectangle);
obj->draw();

Decorator 的 draw() 调用 Rectangle 的 draw() 并增强它(装饰它)。

关于c++ - 在没有多级继承的情况下通过 C++ 中的组合实现多态行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123773/

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