如何将子类分配给函数中的抽象类指针?
-
09-12-2019 - |
题
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;
}
.
我正在尝试在调用函数后使实际的电路板参考等于新电路板。板是一个抽象类,get_board()正在返回一个指针到电路板,但它实际上是一个包含额外属性的电路板的子类。但是,在调用移动功能后,电路板与移动前的电路板相同。是否可以将子类分配给指向抽象超级类的指针,同时修改实际值?切片问题似乎正在发生。
解决方案
我将使用一个生成的Board*
指针而不是世代odicetagcode引用,特别是因为涉及子类:
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);
. 不隶属于 StackOverflow