alter
返回类型
base&
. 这意味着声明
bar.run(bar.alter(foo));
将评估
bar.alter(foo)
,返回对的引用
foo
演员阵容
基本(&A);
. 然后
bar.run()
被称为
基本(&A);
参考
您没有收到警告,因为您给了函数一个
只需要一次过载
基本(&A);
. 如果您希望此特定代码调用
deriv&
过载
run
,您需要更改
基本(&A);
过载如下:
void run(base& type) {
deriv* derivTest = dynamic_cast<deriv*>(&type);
if( derivTest != nullptr )
run(*derivTest);
else
std::cout << "base" << std::endl;
}
这将检查传入的引用是否确实是对的引用
deriv
,并调用正确的
跑
需要时。注意,遍历指针类型可以防止
dynamic_cast