如何解决虚函数可以是另一个类的朋友吗?
理论上到处都写着"A virtual function can be declared as a friend of another class",但实际上在实现它时,编译器会抛出一个错误,说“虚拟函数不能成为朋友”。
这是一个 C++ 程序来说明这一点:
#include <iostream>
using namespace std;
class extra;
class base {
public:
virtual friend void print(extra e);
void show()
{
cout << "show base class" << endl;
}
};
class derived : public base {
public:
void print()
{
cout << "print derived class" << endl;
}
void show()
{
cout << "show derived class" << endl;
}
};
class extra
{
int k;
public:
extra()
{
k=1;
}
friend void print(extra e);
};
void print(extra e)
{
cout<<"virtual friend function "<<e.k;
}
int main()
{
base* bptr;
extra e;
derived d;
bptr = &d;
// virtual function,binded at runtime
bptr->print(e);
// Non-virtual function,binded at compile time
bptr->show();
print(e);
}
输出画面:
解决方法
写作时
virtual friend void print(extra e);
C++ 将此解释为“有一个名为 print
的自由函数,它不是当前类的成员函数,它是虚拟的。”这种组合不可能发生,因为虚函数必须是类的成员函数。
您可以做的是获取在另一个类中定义的现有虚函数,并使其成为该类的朋友。所以,例如,如果有一个虚函数 OtherClass::myFn
,你可以写
friend void OtherClass::myFn();
说“那个特定的虚函数是我的朋友。”但是,请注意,这只会使 OtherClass::myFn
成为班级的朋友; OtherClass::myFn
的任何覆盖都不会是该类的朋友,因为不会继承友谊。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。