gpt4 book ai didi

c++ - 是否可以使用 Gtk::DrawingArea (GTKmm) 作为合成而不是继承?

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

先上GTKmm documentation examplemore complex clock example 上,他们正在继承 public Gtk::DrawingArea 来构建他们的应用程序。

#ifndef GTKMM_EXAMPLE_MYAREA_H
#define GTKMM_EXAMPLE_MYAREA_H

#include <gtkmm/drawingarea.h>

class MyArea : public Gtk::DrawingArea
{
public:
MyArea();
virtual ~MyArea();

protected:
//Override default signal handler:
bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr) override;
};

#endif // GTKMM_EXAMPLE_MYAREA_H

是否可以组合使用DrawingArea,而不是继承它并覆盖on_draw虚方法?

我想这样做,不要将我的方法/属性与从基类 Gtk::DrawingArea 继承的 DrawingArea 方法混合。因此,当我访问某些东西时,我明确地知道我在我的创作中使用了某些东西,因为我的类定义中只有我的东西。通过从 Gtk::DrawingArea 继承东西,我不能确定它是我的东西还是 Gtk::DrawingArea 的东西,除非我知道 上定义的所有东西>Gtk::DrawingArea.

最佳答案

简短回答:不(至少对于您所关心的问题),它不是这样设计的。

更长的答案:

I would like to do so, to not mix my methods/attributes with the DrawingArea methods inherited from the base class Gtk::DrawingArea.

在我看来,不应选择公共(public)继承与组合来替代此类标准,因为它们具有非常明确的概念含义。从基类公开继承的子类意味着(大多数情况下,见下文)这两个类具有 is-a 关系。组合意味着 has-a 关系。

所以要回答你的问题,你应该问问自己这两个类(你自己的类和Gtk::DrawingArea)之间到底是什么关系。你的类(class)是某种绘图区吗?如果是这样,我会建议公共(public)继承。你的类(class)有(或包含)绘图区吗?在那种情况下,我会建议组合。

如果您违反这些概念,您几乎肯定会得到难以使用且不一致的类,并且区分哪个方法来自哪个类将是您最不关心的事情。

最后,请注意,关于继承的内容比这里写的要多得多,并且存在一些异常(exception)情况。参见 this post进行更深入的讨论。

希望这对您有所帮助!

关于c++ - 是否可以使用 Gtk::DrawingArea (GTKmm) 作为合成而不是继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245758/

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