我不明白我在做什么错。我收到错误:以上行从A *到B *的无效转换:

   B *p3=new A(p2->operator+(*p1));


这是完整的代码。

#include <iostream>

using namespace std;

#include <iostream>
using namespace std;

class A
{
  protected: int x;
  public: A(int i=-31) {x=i;}
  virtual A operator+(A a) {return x+a.x;}
};

class B:public A
{
  public:B(int i=12) {x=i;}
  B operator+(B b) {return x+b.x+1;}
  void afisare() {cout<<x;}
};

int main()
{
  A *p1=new B, *p2=new A;
  B *p3=new A(p2->operator+(*p1));
  p3->afisare();
  //cout << "Hello world!" << endl;
  return 0;
}

最佳答案

我认为您在这里继承了遗产。如果您具有类型为A*的指针,则它可以指向类型为A的对象,也可以指向类型为B的对象,因为类型为B的对象也是类型为A的对象。但是,不能将B*类型的指针指向A类型的对象,因为并非所有A类型的对象也都是B类型的。

您可以独立地重写该行

B *p3 = new A(p2->operator+(*p1));




B* p3 = new A(p2 + *p1);


这可能会使事情更容易阅读。

关于c++ - 为什么在此代码中我不能将A *转换为B *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46268383/

10-09 09:54