继承的一大特点就是 , 它允许你通过指向基类的指针和引用来操纵派生类对象.这种指针和引用的行为具有多态性 ------就好像它拥有多种类型.C++ 也允许你通过基类指针和引用来操纵派生类数组.但这算不上什么特性,因为它几乎从来不会按照你期望的那样运行.
例如: BST(二叉搜索数对象)
class BST{......};
class BalancedBST: public BST{.......}
以及一个用于打印BST数组里所有BST元素的数组
void printBSTArray(ostream& s,
const BST array[],
int numElements)
{
for (int i = 0;i<numElements;++i) (记得昨天说得 ++ 前缀和后缀么,如果实现一样的目的,前缀的效率是比后缀高的.)
s << array[i];
}
如果传进去一个BST对象的数组,它会运行的很好:
BST BSTArray[10];
.....
printBSTArray(cout,BSTArray,10);
考虑一下,如果传给printBSTArray 一个包含BalancedBST对象的数组会发生什么情况:
BalancedBST bBstArray[10];
printBSTArray(cout,BSTArray,10);
猜猜会出现什么情况 ? 未完待续.....
例如: BST(二叉搜索数对象)
class BST{......};
class BalancedBST: public BST{.......}
以及一个用于打印BST数组里所有BST元素的数组
void printBSTArray(ostream& s,
const BST array[],
int numElements)
{
for (int i = 0;i<numElements;++i) (记得昨天说得 ++ 前缀和后缀么,如果实现一样的目的,前缀的效率是比后缀高的.)
s << array[i];
}
如果传进去一个BST对象的数组,它会运行的很好:
BST BSTArray[10];
.....
printBSTArray(cout,BSTArray,10);
考虑一下,如果传给printBSTArray 一个包含BalancedBST对象的数组会发生什么情况:
BalancedBST bBstArray[10];
printBSTArray(cout,BSTArray,10);
猜猜会出现什么情况 ? 未完待续.....
本文探讨了 C++ 中的继承和多态概念,特别是如何通过基类指针操作派生类对象和数组。文章通过具体的 BST 和 BalancedBST 类的例子,展示了多态性的实际应用,并讨论了当函数接受基类指针和引用时可能出现的问题。

被折叠的 条评论
为什么被折叠?



