如何将子类分配给函数中的抽象类指针


void Player::move(Board &board, Solver &solver){
   Position* best = solver.find_best_move(&board);
   cout<<"Score: "<<best->get_score()<<endl;
   cout<<"Board: ";
   best->get_board()->print_board();
   board = *(best->get_board());
   Board * b(best->get_board());
   cout<<"TEST: ";
   b->print_board();
   board = *b;
  }

我正在尝试在调用函数后使实际板引用等于新板。 Board 是一个抽象类,get_board(( 返回指向 Board 的指针,但它实际上是 Board 的一个子类,它有一个额外的属性。但是,在调用移动函数后,板与调用移动之前是相同的板。是否可以在修改实际值的同时将子类分配给指向抽象超类的指针?切片问题似乎正在发生。

我会使用 Board* 指针而不是 Board& 引用,特别是因为涉及子类:

void Player::move(Board **board, Solver &solver)
{ 
   Position *best = solver.find_best_move(*board); 
   cout << "Score: " << best->get_score() << endl; 
   *board = best->get_board(); 
   cout << "Board: "; 
   (*board)->print_board(); 
} 
Player p;
Solver solver;
Board *b = ...;
p.move(&b, solver);

或:

void Player::move(Board* &board, Solver &solver)
{ 
   Position *best = solver.find_best_move(board); 
   cout << "Score: " << best->get_score() << endl; 
   board = best->get_board(); 
   cout << "Board: "; 
   board->print_board(); 
} 
Player p;
Solver solver;
Board *b = ...;
p.move(b, solver);

最新更新