gpt4 book ai didi

类外的C++虚函数实现

转载 作者:可可西里 更新时间:2023-11-01 17:35:56 26 4
gpt4 key购买 nike

我是 C++ 新手。在尝试示例多态性代码时,我发现派生类中的基类虚函数定义只有在派生类中定义或在派生类中声明外部时才有可能。

以下代码报错:

class B
{
public:
virtual void f();
};

void B::f() {
std::cout<<"B::f";
}

class D : public B
{
public:
void f2() {int b;}
};

// error: no "void D::f()" member function declared in class "D"
void D::f() {
std::cout<<"D::F";
}

如果我在 D 中声明 f(),它会起作用。我想知道为什么我需要再次显式声明该函数,因为它已经在 Base 类中声明了。编译器可以从基类获取签名吗?

提前致谢..

最佳答案

您不能在类定义之外向类添加成员。如果您希望 D 覆盖 B::f,那么您必须在类定义中声明它。这些是规则。

在基类中声明成员不会自动为派生类提供相同的成员。从基类继承为派生类提供基类的所有成员,因此您可以选择是否覆盖、隐藏或添加到基类成员,但您必须通过声明覆盖函数来指示在类定义中覆盖的选择。

关于类外的C++虚函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498712/

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