我正在看使用C ++的OOP教程,并解释了多态性和抽象类,使用了以下幻灯片:
因此,您可以看到定义了一个名为“ base”的基类以及两个派生类“ savings”和“ current”,然后将“ savings”对象(以及后来的“ current”对象)的地址分配给“基本”指针。
尽管我了解函数根据上下文的行为方式,但我不太了解为什么要在哪里进行这样的指针分配。有人可以解释一下吗?另外,如果有更好的示例来演示相同的概念,也将不胜感激。
答案 0 :(得分:1)
为什么?因为您想遍历混合在一起的当前和储蓄列表/数组。同样,通过具有相同的基本类型,您可以将其传递给带有基本指针的函数,该指针对不同的派生类执行相同的概念。
答案 1 :(得分:1)
考虑此方法:
void foo(base* b) {
// ...some stuff...
b->call(); // virtual function call
// calls either savings::call or
// current::call, depening on the
// actual type of b
// ...more stuff...
}
此方法并不关心您传递指向savings
的指针还是传递current
的指针。您可以这样称呼它:
savings s;
current c;
foo(&s);
foo(&c);
或者如果您想更明确地分配指针:
savings s;
current c;
base* b_ptr = &s;
foo(b_ptr);
b_ptr = &c;
foo(b_ptr);
答案 2 :(得分:0)
默认情况下,基类指针可以保存基类的地址以及众所周知的派生调用。但是,如果我们在基类中不使用虚拟关键字,则基类指针将根据指针的类型而不是基于其持有的值来调用方法。
因此,要实现多态行为,必须在基类中使用virtual。 如果需要根据持有的基类指针的类型调用不同的方法,则需要为基类指针分配对象地址。
,如果我们在一个类中有一个纯虚函数,则它称为抽象类。并且没有创建抽象类的对象。