Col*_*len 1 c++ class ambiguity
今天我在代码库中发现了以下令人不安的模糊情况:
class Base {
public:
virtual void Irrelevant_Function(void) = 0;
protected:
C_Container * Get_Container(void);
};
class A : public Base, public Not_Important {
public:
inline C_Container * Get_Container(void);
};
class B : public Base, protected SomethingElse {
public:
C_Container * Get_Container(void);
};
Run Code Online (Sandbox Code Playgroud)
许多事情都在调用Get_Container方法,但并不总是调用正确的方法 - 注意这些函数都不是虚拟的.
我需要重命名方法Get_Base_Container,Get_A_Container等,以消除不确定性.C++使用什么规则来确定它应该调用哪个版本的函数?我想从应该调用的"已知状态"开始,然后从中找出错误.
例如,如果我有一个指向Base的指针并调用Get_Container,我认为它只会调用该函数的Base版本.如果我有指向A的指针怎么办?指向B的指针怎么样?堆上的A或B怎么样?
谢谢.
这取决于你如何调用该函数.如果你通过a A *,an A &或an A来电话,那么你就会打电话A::Get_Container().如果你打电话通过a Base *,a Base &(即使他们指向/引用A),那么你将会打电话Base::Get_Container().
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |