gpt4 book ai didi

c++ - 不从接口(interface)继承的虚函数

转载 作者:行者123 更新时间:2023-11-30 01:12:42 25 4
gpt4 key购买 nike

我有一个带有默认实现的接口(interface)类和一个带有头文件和 cpp 文件的继承类。

列表.h

class List {
public:
virtual int search(const string searchCharacters, bool caseSensitive){return 0;}
}

我的列表.h

class MyList : public List {

}

我的列表.cpp

int MyList::search(const string searchCharacters, bool caseSensitive)
{
// Implementation code
}

现在,由于某种原因,我得到了未在“MyList”中声明的成员函数。我有 Java 背景,但在适应 C++ 方式方面仍然存在一些问题。为什么不通过 MyList 头文件进行定义?

最佳答案

您需要在派生类中声明该函数:

class MyList : public List
{
public:
int search(const string searchCharacters, bool caseSensitive);
}

请注意,声明和定义在 C++ 中不是一回事。在这种情况下,你不能在没有声明的情况下在cpp文件中定义成员函数。如果您不声明(和定义)它,那么派生类将从基类继承它,包括定义。

如果你希望它是多态的,你需要在基类中使它成为虚拟的,如果你要通过基类的指针使用它们,最好同时使析构函数成为虚拟的:

class List
{
public:
virtual int search(const string searchCharacters, bool caseSensitive){return 0;}
virtual ~List() {}
}

正如@SergeyA 所指出的,您还可以将其设为纯虚函数,使其更类似于 java 风格的接口(interface)。在这种情况下,您不需要为其提供定义。 (你还是可以提供一个)

class List
{
public:
virtual int search(const string searchCharacters, bool caseSensitive) = 0;
virtual ~List() {}
}

最后,C++和Java完全不同。如果您想精通 C++,请尝试以 C++ 的方式思考。

关于c++ - 不从接口(interface)继承的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33570690/

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