简体   繁体   中英

C++ Polymorphism : Is it possible to use a function from a double derived class into the base class?

I'm new to polymorphism and I'm trying to learn how this exactly works. I want for example to get the print() function of class Y and use it in the base class. Is this possible to do?

class A
{
public:
  A() = default;
  virtual void print()
  {
    //Is it possible to get the print() function of class Y here ?
  };
};

class B : public A
{
public:
  B() = default;
  void print(){ std::cout << "B " << std::endl;}
};

class C : public A
{
  public:
  C() = default;
  void print(){ std::cout << "C " << std::endl;}
};

class Y : public C , public B 
{
  public:
  Y() = default;
  void print()
  {
     B::print();
     C::print();
  }
 
};

int main()
{ 
  A a;
  a.print();
  return 0;
}

Your main() is creating an A object directly, not a Y object. That is why you are not seeing the output you want. Polymorphism only works when accessing derived class objects via base class pointers/references, eg:

int main()
{ 
  Y y;
  A *a = static_cast<C*>(&y);
  a->print();
  return 0;
}
int main()
{ 
  Y y;
  A &a = static_cast<C&>(y);
  a.print();
  return 0;
}

The reason for the type cast is because Y has 2 A portions, one from B and one from C , so you have to help the compiler a little by specifying which A you want to point to.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM