gpt4 book ai didi

c++ - 用非纯虚版本重载纯虚函数

转载 作者:可可西里 更新时间:2023-11-01 15:46:13 24 4
gpt4 key购买 nike

<分区>

Base 和 Derived 定义如下:

class Base {

public:
virtual int f1(int a) const = 0;
virtual int f2(int a, int b) const { return a+b;}
};

class Derived : public Base {

public:
int f1(int a) const { return a; }
};

int main() {
Derived obj;
cout << obj.f1(1) << endl;
cout << obj.f2(1, 2) << endl;
}

结果是

1
3

obj.f1(1) 使用 Derivedobj.f2(1, 2) f1 实现em> 使用继承自 Base 的实现,这正是我想要的。

现在,我希望这两个函数具有相同的名称,f,因此基类在有两个参数时提供一个实现,而派生类必须实现单参数版本(即为什么它是纯虚拟的)。

但是,如果我这样做(只需将 f1f2 重命名为 f):

class Base {

public:
virtual int f(int a) const = 0;
virtual int f(int a, int b) const { return a + b;}
};

class Derived : public Base {

public:
int f(int a) const { return a; }
};

int main() {
Derived obj;
cout << obj.f(1) << endl;
cout << obj.f(1, 2) << endl;
}

我收到以下错误:

20:23: error: no matching function for call to 'Derived::f(int, int)'
20:23: note: candidate is:
14:13: note: virtual int Derived::f(int) const
14:13: note: candidate expects 1 argument, 2 provided

这是为什么?做这种重载是不可能的吗?

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