gpt4 book ai didi

c++ - VS2008 C++好像不能继承const重载方法

转载 作者:行者123 更新时间:2023-11-30 04:08:12 24 4
gpt4 key购买 nike

<分区>

我只是惊讶地发现下面的代码在 VS2008 中无法编译。编译器提示它无法将参数 1 从 const int 转换为 int&,因此表明它未能查看 Base 类中的可用方法。

这是否有充分的理由,或者这是其他编译器中没有发现的缺陷?

struct Base
{
virtual void doIt(int& v){cout << "Base NonConst v=" << v << endl;}
virtual void doIt(const int& v) const {cout << "Base Const v=" << v << endl;}
};

struct Child : public Base
{
virtual void doIt(int& v){cout << "Child NonConst v=" << v << endl;}
};

int _tmain(int argc, _TCHAR* argv[])
{
int i = 99;
const int& c_i = i;

Child sc;
sc.doIt(i);
sc.doIt(c_i);
}

如果我删除 Child 类中的单个重写方法,或者如果我通过 Base 指针访问子类(当然,如果我重写子类中的两个方法),这将按预期编译和工作。

但是,当直接从 Child 类或 Child 类指针访问时,重写一个方法而不是另一个方法似乎隐藏了未重写的 Base 类方法。

什么鬼?我错过了什么吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com