【发布时间】:2009-12-12 15:02:53
【问题描述】:
我正在阅读 meyers “更有效的 C++ 35 种新方法”——第 33 项,他在此提出建议 总是从抽象基类继承,而不是具体的。
他声称的其中一个原因(我不太明白)是从抽象类继承,多态处理数组(书中的第 3 项)不是问题。
有人可以建议这是怎么回事吗?
此外,我想知道永远不要让客户端实例化其他派生的类是否真的总是一件好事? (例如,meyers 在他的书中展示了赋值运算符的问题)
请求的代码示例:
类 BST {.... };
CLASS BlanacedBST:: 公共 BST {....}
void printBSTArray(ostream& s, const BST array[],int Numelements) { for(int i=0;i
BST BSTArray[10]; printBSTArray(BSTArray); // 工作正常
BlanacedBST bBSTArray[10]; printBSTArray(bBSTArray); // 未定义的行为(因为下标运算符根据 BST 块大小使指针前进)
然后,他补充说,避免从另一个 concreat 类 (BST) 继承的 concreate 类 (BlanacedBST) 通常可以避免这个问题 - 这我不明白。
【问题讨论】:
-
当有人建议做任何事情总是或从不你可以放心地忽略其余的。
-
是的,忽略其余部分总是是安全的 ;-)
-
我没有这本书,所以我无法解决您在这方面的具体问题,尽管我熟悉他关于仅使用纯抽象基类的建议。也许您可以粘贴他使用的代码示例?
-
我也不明白。无论如何,这个问题应该会出现。
标签: c++ class polymorphism abstract-class