gpt4 book ai didi

c++ - 从派生友元函数调用 protected 函数

转载 作者:行者123 更新时间:2023-11-28 06:13:28 29 4
gpt4 key购买 nike

我有一个基类 Animal 和一个派生类 LionAnimal 有一个名为 eat() 的 protected 函数。我想从 Lion 中定义的友元函数调用 eat(),但是当它无法编译时:

error: call to non-static member function without an object argument

为什么我不能从 Lion 的 friend 那里调用 protected 函数?我有变通办法,但我不明白为什么 friend 不能调用 eat()。如果我使用 Animal::eatLion::eat 似乎并不重要,我得到同样的错误。想法?

#include <iostream>
using namespace std;

class Animal{
public:
Animal(int m) : mass(m){}
int getMass() const { return mass; }
protected:
int mass;
void eat(const Animal& lhs, const Animal& rhs, Animal *result){
result->mass = lhs.getMass() + rhs.getMass();
}
};

class Gazelle : public Animal{
public:
Gazelle(int m) : Animal(m){}
};

class Lion : public Animal{
public:
Lion(int m) : Animal(m){}

friend Lion feed(const Lion &lhs, const Gazelle &rhs){
Lion hungry(0);
eat(lhs, rhs, &hungry);
return hungry;
}
};

int main(void){
Lion leo(5);
Gazelle greg(1);

Lion fullLeo = feed(leo, greg);
cout << "Full Leo has mass " << fullLeo.getMass() << endl;
}

最佳答案

friend 函数是一个非成员函数,它可以访问类的私有(private)成员。但是您仍然必须提供访问数据成员的对象详细信息。

eat函数的用法必须类似于feed函数中的object_name.eat()

关于c++ - 从派生友元函数调用 protected 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768024/

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