类族内各种类型指针的限制

Limitations on pointers to various types within a class family?

本文关键字:指针 类型 种类      更新时间:2023-10-16

假设我有4个类:A,B,C, d。

A是基类。B由A衍生而来。C来源于a。

D来源于b。

我有每种类型对象的向量

我创建了第5个类,它被排除在相关类(族?)之外,称为Z。Z包含一个变量,该变量指向类a的对象,称为purple。

我可以创建一个"inter-family"通用指针,通过这样做:A * p universal;

和指向A、B、C或D的pUniversal可互换地指向存储在其类型的vector中的对象。然后将Z的purple变量设为pUniversal?

可以。这是拥有派生类的主要好处之一。

如果A中的功能应该由BC实现,请确保它们是虚拟的

你可以!不,我不是奥巴马=P,但你可以考虑读一些关于reinterpret_cast<>关键字(操作符)。


EDIT: reinterpret_cast<>可用于基类指针转换为派生类指针。

示例:

  #include <iostream>
  #include <vector> 
  class A
  {
  public:
    virtual void SayHi() {
      std::cout<<"A says hi"<< std::endl;
    }
  };
    class B : public A
    {
    public:
        virtual void SayHi() {
          std::cout<<"B says hi"<<std::endl;
        }
    };
    class C: public A 
    {
    public:
        virtual void SayHi() {
          std::cout<<"C says hi"<<std::endl;
        }
    };
    typedef std::shared_ptr<A> APtr;
    typedef std::vector<APtr> Container;
  int main()
  {
      Container myContainer;
      // Store A's instance or any of its derivatives.
      myContainer.push_back(APtr(new A));
      myContainer.push_back(APtr(new B));
      myContainer.push_back(APtr(new C));
      for(/*Container::iterator or */ auto pbase = myContainer.begin(); pbase != myContainer.end(); pbase++)
          (*pbase)->SayHi();
      myContainer.clear();
      return 0;
  }
相关文章: