繁体   English   中英

如何在函数中为抽象类指针分配子类?

[英]How to assign a subclass to an abstract class pointer in a function?

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的子类,具有一个额外的属性。 但是,在调用move函数之后,该板与调用移动之前的板相同。 在修改实际值的同时,是否可以将子类分配给指向抽象超类的指针? 切片的问题似乎正在发生。

我将使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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