【发布时间】:2012-03-12 20:24:11
【问题描述】:
请明确说明以下案例中的方法解析规则是什么。我有一个想法,基于代码的行为,但想澄清一下。
基于“调用对象的 const-ness 确定哪个版本的 MyArray::Get() 将被调用,因此是否给调用者一个引用,他可以使用该引用来操作或仅观察其中的私有数据对象。这两种方法在技术上具有不同的签名,因为它们的“this”指针具有不同的类型,允许编译器从wikipedia const correctness 中选择正确的“,我会得出结论,我的示例应该是 方法重载的情况, not 方法覆盖(因为 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();
}
【问题讨论】:
标签: c++ overriding constants overloading method-signature