请明确解释以下案例中的方法解析规则。我有一个想法,基于代码的行为,但想澄清一下。
基于“调用对象的 const-ness 确定将调用哪个版本的 MyArray::Get() ,从而确定调用者是否被给予一个引用,他可以使用该引用来操作或仅观察对象中的私有数据。这两种方法在技术上具有不同的签名,因为它们的“this”指针具有不同的类型,允许编译器从维基百科 const 正确性中选择正确的“ ,我会得出结论,我的示例应该是方法重载的情况,而不是方法覆盖(因为const 方法和非常量方法有两个不同的签名)。
class Base
{
public:
void test()
{ std::cout << "nonconst call" << std::endl; }
};
class Child : public Base
{
public:
void test() const
{
std::cout << "const call" << std::endl;
Child * nonConstThis = const_cast<Child * >(this);
Base * nonConstBase = dynamic_cast<Base * >(nonConstThis);
// This call leads to infinite recursion by calling
// "void Child::test() const", which implies that
// a "Child *" will resolve to calling a const Child function
// before calling a non-const Base function.
//nonConstThis->test();
// This will call "void Base::test()"
nonConstBase->test();
}
};
void main()
{
Child * child = new Child;
child->test();
}