今天,我在我们的代码库中发现了以下令人不安的模棱两可的情况:
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);
};
许多事情都在调用 Get_Container 方法,但并不总是调用正确的方法——请注意,这些函数都不是虚拟的。
我需要重命名方法Get_Base_Container
,Get_A_Container
等以消除歧义。C++ 使用什么规则来确定它应该调用哪个版本的函数?我想从应该被调用的“已知状态”开始,然后从那里找出错误。
例如,如果我有一个指向 Base 的指针并调用 Get_Container,我假设它只会调用该函数的 Base 版本。如果我有一个指向 A 的指针怎么办?指向 B 的指针呢?堆上的 A 或 B 呢?
谢谢。