gpt4 book ai didi

c++ - 在 C++ 中如何继承父类的非成员函数,这些函数只是在文件中定义?

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

我有这样的代码:

class A{  // declaration is simplified
virtual void FNC1();
};
bool compare(S s1,S s2){
return s1<s2;
}
void A::FNC1(){
iterator it;
sort(it.begin(),it.end(),compare);
}

class B : public A{
virtual void FNC1();
};
void B:FNC1(){
iterator it;
// do something different

sort(it.begin(),it.end(),compare);
}

所以我用 B 类继承 A 类并覆盖函数 FNC1(),但问题是,在 std::sort() 函数中,第三个变量实际上应该是一个函数,而这样的函数总是直接声明。我很想知道如何避免复制粘贴,让B直接继承这个功能。我试图将 compare() 函数作为 A 的成员函数,但它不会编译: sort(it.begin(), it.end(), this->compare);

我试图将比较函数包含到一个单独的头文件中,它说我不能声明它。我怎样才能正确地让 B 继承这个功能?因为,在实践中,我有3个类都需要重用A的代码,比较函数真的很复杂。

最佳答案

您的问题是函数 compare 是在 header 中定义的,这意味着除了签名之外,您还有它的主体。如果您在两个地方包含 header ,编译器将提示多个定义。您应该只在 header 中包含声明,在 .cpp 文件中包含定义。

这应该进入 A 的 header ,我们称它为 a.h

bool compare(S s1,S s2);

这应该进入 a.cpp

bool compare(S s1,S s2){
return s1<s2;
}

顺便说一句,为了澄清术语,您不能继承非成员函数。您可以在任何地方使用任何非成员函数,只要您包含其声明并链接到其目标文件即可。

关于c++ - 在 C++ 中如何继承父类的非成员函数,这些函数只是在文件中定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596763/

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