引用指针 - 多态性

时间:2015-07-08 16:23:47

标签: c++ pointers polymorphism

如果我 NOT 在将基指针发送到另一个类构造函数时使用对指针的引用 - 此类中的将basepointer绑定到派生对象base - basepointer返回NULL。

简单 - 这是什么原因?

#include <iostream>
using namespace std;

class Base {
   public:
      virtual void print() = 0;
};

class Sub1 : public Base {
public:
   void print() {
      cout << "I am allocated!\n";
  }
};

class App {
public: 
   App(Base *b) {
      b = new Sub1;
   }
};

int main() {
   Base *b;
   b = NULL;

   App app(b);

   if (b != NULL)
      b->print();
   else
      cout << "Basepointer is NULL\n";

   return 0;
}

这里的关键部分是App-class构造函数的签名

不使用对basepointer的引用,即

   App(Base *b)

输出是:

   Basepointer is NULL

当使用对基类的引用时,即

  App(Base *&b)

输出是:

 I am allocated!

1 个答案:

答案 0 :(得分:0)

您正在通过值传递指针,这意味着该值已被复制,并且在该函数中您只需修改副本。修改副本当然不会修改原件。