将派生类的地址分配给基类指针

时间:2018-08-03 12:59:09

标签: c++ oop pointers

我正在看使用C ++的OOP教程,并解释了多态性和抽象类,使用了以下幻灯片:

Slide from tutorial

因此,您可以看到定义了一个名为“ base”的基类以及两个派生类“ savings”和“ current”,然后将“ savings”对象(以及后来的“ current”对象)的地址分配给“基本”指针。

尽管我了解函数根据上下文的行为方式,但我不太了解为什么要在哪里进行这样的指针分配。有人可以解释一下吗?另外,如果有更好的示例来演示相同的概念,也将不胜感激。

3 个答案:

答案 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。 如果需要根据持有的基类指针的类型调用不同的方法,则需要为基类指针分配对象地址。

,如果我们在一个类中有一个纯虚函数,则它称为抽象类。并且没有创建抽象类的对象。