友元函数c++内部类
friend function c++ inside class
我写了这段代码,但是朋友函数不工作(foodmoney和hobbymoney没有在我的朋友函数中声明)。我的错误在哪里?
#include <iostream>
using namespace std;
class myBase
{
private:
int friendvar;
int foodmoney;
int hobbymoney;
public:
void setdata();
myBase(){friendvar=0;}
friend void caldata(myBase &mbo);
};
void myBase::setdata()
{
cout<<"Enter foodmoney :" ;cin>>foodmoney;
cout<<"enter hoobymoney:";cin>>hobbymoney;
}
void caldata(myBase &mbo)
{
mbo.friendvar=(foodmoney+hobbymoney)/2;
cout<<mbo.friendvar<<endl;
}
int main()
{
myBase baseobj;
baseobj.setdata();
myBase friends;
caldata(friends);
return 0;
}
mbo.friendvar=(foodmoney+hobbymoney);
应为
mbo.friendvar=(mbo.foodmoney+mbo.hobbymoney);
等。等。
友元函数是而不是成员函数,因此它们没有对任何特定对象的特殊访问权限。您必须指定您希望访问的对象(在您的示例中使用mbo
)。
话虽如此,我看不出caldata为什么是友元函数。为什么不让它成为一个常规的成员函数呢?或者你应该让它成为一个带两个参数的友元函数?很难说你想达到什么目的。
change
cin>>foodmoney;
cin>>mbo.foodmoney;
和改变
cin>>hobbymoney;
cin>>mbo.hobbymoney;
您的代码根本无法编译。Fix已经描述过了。但是为了使它完整:当您使用mbo.friendvar
引用friendvar
时,请对foodmoney
和hobbymoney
做同样的操作。
也没有在构造函数中初始化foodmoney
和hobbymoney
。在你对caldata(friends);
的调用中,你因此得到随机结果打印在屏幕上。最后:你用myBase friends;
实例化了一个新对象,所以这是一个完全新的对象,不受之前调用setdata()
的影响。
你对这个功能的低级要求在你的问题中没有定义,我不能帮助更多。
相关文章:
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 参数化类的别名(或类型定义)内部类
- 从内部类的析构函数调用虚拟函数
- 如何在没有setter的情况下设置类内部类的成员变量?
- 具有相同名称的方法和内部类(错误:.. 与前面的声明冲突)
- 内部类私有成员访问和封闭的友好性
- 在C++中从内部类对象获取外部类对象
- 在它所属的模板类中使用内部类
- C++命名空间、内部类和运算符解析
- 从内部类访问外部公共成员