gpt4 book ai didi

c++ - C++中具有友元函数的多态性

转载 作者:行者123 更新时间:2023-12-02 09:49:47 24 4
gpt4 key购买 nike

我想结合多态性和友元的概念。我正在使基类的纯虚拟成员函数成为另一个类的 friend 。然后我想在从该基类派生的类中覆盖这个纯虚成员函数,并访问具有 friend 等功能的类的私有(private)成员数据。请参阅下面的代码片段。当我引用 my_int 时,编译器会报错在派生类成员函数add() .我知道友元是一对一的关系,但我想知道是否有任何方法可以实现多态性。我是否只需要使foo() 的不同派生类的成员函数成为 friend ?类(class)?

class foo {
private:
int my_int{};
public:
friend virtual int base::add();
};

class base {
public:
virtual int add() = 0;
};

class derived_1 : public base {
public:
int add() {
return my_int + 1;
}
};

class derived_2 : public base {
public:
int add() {
return my_int + 2;
}
}

最佳答案

首先,对于您所显示的内容,它不起作用,因为 my_int 是 foo 的成员,但在基类树中没有“foo”可以从中获取成员。

简单的答案是让函数接受一个 int 参数并完全取消使用 friend 。

struct derived2 : base
{
int add(int arg) { return arg + 2; }
};

使用“ friend ”应该让您认真质疑您所做的是否是一个好的答案,有时该问题的答案是"is"但不经常。你需要的 friend 越多,答案仍然是"is"的频率就越低。

另一种方法是向基础添加一个函数:
int get_arg(foo & f) { return f.my_int; }

并使该函数成为 friend 而不是添加,将从每个派生的 add() 调用 get_arg() 以获取要使用的值,但 get_arg 本身不是虚拟的。

关于c++ - C++中具有友元函数的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193290/

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