永发信息网

c++ 友元类小程序

答案:5  悬赏:60  手机版
解决时间 2021-03-17 05:27
  • 提问者网友:愿为果
  • 2021-03-16 13:58
#include<iostream>
using namespace std;
class A{
int data;
public:
A(int d=0):data(d){}
void show()
{
cout<<"data="<<data<<endl;
}
friend class B;
};
class B{
public:
void twice(A& a)
{
a.data*=2;
}
};

int main()
{
A oa(50);
B ob;
oa.show();
}
为什么运行的结果是50呢?我用的是引用啊,请帮忙解答一下,谢谢
最佳答案
  • 五星知识达人网友:执傲
  • 2021-03-16 15:04
twice函数一直没用过,怎么变?
A oa(50);
B ob;
ob.twice(oa); 加这句,调用一次
oa.show();
全部回答
  • 1楼网友:山河有幸埋战骨
  • 2021-03-16 19:09
friend在这里确实是沟通了Student::display( );和class Box的作用域。但是被friend沟通的display()中没有 private : int num; string name; char sex; 这些标识符,它们不属于这个函数作用域本身,它们能被访问在于void display( )的外部而在class Student类作用域中。friend只是简单沟通了void display( )的作用域,在void display( )的作用域本身中没有那些private私有成员,所以报错了~
  • 2楼网友:十鸦
  • 2021-03-16 17:46
这有什么不好理解的,你把friend去掉试试,看看出什么问题~ 友元是为方便对象访问私有成员设置的,对象访问私有数据成员只能通过公有函数来访问,但是在友元函数中可以使用 对象.数据成员 的方式访问私有数据成员~ 对于友元类,如果一个类是另一个类的友元类,则则个类的所有函数是另一个类的友元函数~ 这在类的嵌套中访问数据成员很方便。 友元破坏类的封装性~ 好好看看课本,体会体会~ 要是类的话 最好使用 class 而不要使用 struct~
  • 3楼网友:掌灯师
  • 2021-03-16 16:59
童鞋 你都没 用 对象ob调用 B类的 twice方法 如何使 对象a的data成员 变成100 ? oa.show(); ob.twice(oa); oa.show();
  • 4楼网友:一叶十三刺
  • 2021-03-16 15:45

把这个函数void datetime(date &d ,time &t); 同时声明为time类和 date类的友元.

括号里的是参数啊.date&d表示d是date类型的引用,time &t表示t是time类型的引用.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯