C++ 如何将子类分配给函数中的抽象类指针? void播放器::移动(棋盘&棋盘,解算器&解算器){ 位置*最佳=解算器。查找最佳移动(&B); cout
我会使用C++ 如何将子类分配给函数中的抽象类指针? void播放器::移动(棋盘&棋盘,解算器&解算器){ 位置*最佳=解算器。查找最佳移动(&B); cout,c++,pointers,reference,abstract-class,object-slicing,C++,Pointers,Reference,Abstract Class,Object Slicing,我会使用Board*指针而不是Board&引用,特别是因为涉及到子类: void Player::move(Board &board, Solver &solver){ Position* best = solver.find_best_move(&board); cout<<"Score: "<<best->get_score()<<endl; cout<<"Board: "; best-&g
Board*
指针而不是Board&
引用,特别是因为涉及到子类:
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;
}
void播放器::移动(棋盘**棋盘、解算器和解算器)
{
位置*最佳=解算器。查找最佳移动(*板);
修改实际参考时不能执行?
Huhboard=*(最佳->获取板()
这可能会做一个板上的
复制。您将要实现一些虚拟的克隆
函数,并且必须在每个派生类中实现它。请注意,您不能修改引用,只需修改它引用的内容。同意,您应该提到潜在的内存泄漏:一个must在为指针指定新值之前,请确保原始指针对象已(或将)被销毁。即使我传入Board的指针子类,例如ChessBoard*Board=new ChessBoard,并将其传递到move(&Board,solver)中,这是否有效@J.N:我想的更多的是将对子类实例的引用分割成一个Board
实例,这样所有的子类信息都会丢失。@user979663:只要总是返回棋盘
或子类,它就可以工作。但是如果可以返回与无关的不同类型的Board
ode>ChessBoard
,则必须将变量声明为Board*
而不是ChessBoard*
。此外,如果new
原始Board
,则在使用完后不要忘记删除它。如果move()
要更改指针,则
必须删除
原件,否则调用代码需要记住原件,以便在移动()后删除
原件
exits.Aha,我现在什么都懂了。我想做的是改变点的指向。我需要的线索是使用双指针。谢谢你,雷米,我整天都在努力解决这个问题,我觉得我尝试了一切。谢谢
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);