【发布时间】:2017-03-24 18:43:32
【问题描述】:
我正在开发一个基于 Arduino 的系统(即嵌入式系统)的项目,并且只有有限数量的 ROM 可供代码使用。
我发现自己需要几种不同类型的集合类(例如List、Stack、Queue)。
写完这些后,我注意到除了使它们表现不同的特性(例如Add vs Push vs Enqueue,Pop vs Dequeue)之外,它们共享许多共同的功能(例如,它们具有确切的相同的字段)。
这让我想到,如果我要创建一个包含其他类的所有通用功能的基类(我们称之为Collection)并让其他类继承自它,并让它们只实现功能不同,会导致编译代码更少吗?
我希望它会这样,因为子类都可以引用父类对公共函数的实现,但我可能是错的,所以我宁愿在尝试此更改之前先询问一下。
好的,为了进一步澄清这一点,因为人们似乎在误解,考虑这些假设的类:
class A
{
protected:
int value;
public:
void assign(int other)
{
this->value = other;
}
}
class B : public A
{
public:
void assignAdd5(int other)
{
this->value = other + 5;
}
}
然后是代码:
A a = A();
B b = B();
a.assign(4);
b.assign(4);
我期望assign 在两种情况下都引用相同的方法(因此是相同的编译代码块),尽管类型不同,因为B 是A 的子类。如果是这种情况,那么让具有相似功能的类都继承自实现相似性的单个基类将产生比让每个类单独实现功能更少的编译代码,因为每个子类将使用相同的函数。
我提供的关于提示这个问题的情况的信息仅仅是背景,我认为 any 编译器是否属于这种情况,而不仅仅是我正在使用的编译器(我非常感谢答案可能是“某些编译器可能会这样做,但并非所有编译器都会这样做”,这是一个完全可以接受的答案)。
【问题讨论】:
-
你为什么不试试看?
-
@tobi303 因为这很耗时,所以有人可能已经知道答案,而我在 SO 上找不到这个问题的答案,所以我想也许其他人可能会从答案中受益。
-
这并不是批评,但最终数字可能会因您的具体情况而有所不同。我现在很好奇,想举个例子,它会有所作为
-
this 在某种程度上是相关的。不幸的是,接受的答案仅针对可执行文件大小无关紧要的窗口
-
为什么有 3 种类型?一种。它支持前后推/弹。支持中间添加。当用作
Queue时,您...不要调用其他方法。仅当一种类型的权衡使得另一种类型的解决方案次优时才编写新类型,并且该成本值得支持和交付更多代码。
标签: c++ c++11 inheritance size