鱼C论坛

 找回密码
 立即注册
查看: 4422|回复: 4

友元类

[复制链接]
发表于 2013-5-12 16:39:56 | 显示全部楼层 |阅读模式
5鱼币
定义Rich与poor两个类,二者都有income属性,定义二者的一个友元函数Defincome(),计算二者的收入之差。


求帮我改下错...指点一下
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;



  4. class rich //定义rich类
  5. {
  6. int income;

  7. public:

  8. friend class poor;// 将poor设置为友元函数
  9. friend void defincome(); //友元函数defincome
  10. void set(int i);
  11. void show();//设置rich类的展示,
  12. };
  13. //同理poor如下
  14. class poor
  15. {
  16. int income;

  17. public:

  18. friend void defincome();
  19. void set(int n);
  20. void show();
  21. };
  22. //以下为各函数的定义
  23. void rich::show()
  24. {
  25. cout<<"rich income:"<<rich.income<<endl;
  26. }

  27. void poor::show()
  28. {
  29. cout<<"poor income:"<<poor.income<<endl;
  30. }

  31. void rich::set(int i)
  32. {
  33. income=i;
  34. }

  35. void poor::set(int n)
  36. {
  37. income=n;
  38. }
  39. void defincome()
  40. {
  41. cout<<rich.income-poor.income<<endl;
  42. }

  43. int main()
  44. {
  45. rich a;//1-3行先展示rich类的数9
  46. a.set(9);
  47. a.show();
  48. poor b;//4-6展示poor类的数3
  49. b.set(3);
  50. b.show();

  51. defincome();//输出两者相差

  52. return 0;

  53. }
复制代码
求改错,求正确答案...说好的学习交流呢??

最佳答案

查看完整内容

你这个defincome函数显然有问题, 举个例子,假如你在main函数里 这样写 rich a, b; poor c; ........ 然后像63行一样写defincome(); 那程序怎么知道你要相减的是a和c,还是b和c呢; 附上我改的,不懂再来问 #include #include using namespace std; class rich //定义rich类 { public: int income; public: friend class poor;// 将poor设置为友元函数 friend void defincome(rich,poor); // ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-12 16:39:57 | 显示全部楼层
你这个defincome函数显然有问题,
举个例子,假如你在main函数里
这样写
rich a, b;
poor c;   
........
然后像63行一样写defincome();
那程序怎么知道你要相减的是a和c,还是b和c呢;
附上我改的,不懂再来问


#include <iostream>
#include <string>
using namespace std;

class rich //定义rich类
{
public:        int income;
       
public:
       
        friend class poor;// 将poor设置为友元函数
        friend void defincome(rich,poor); //友元函数defincome
        void set(int i);
        void show();//设置rich类的展示,
};
//同理poor如下
class poor
{
        int income;
       
public:
       
        friend void defincome(rich,poor);
        void set(int n);
        void show();
};
//以下为各函数的定义
void rich::show()
{
        cout<<"rich income:"<<this->income<<endl;
}

void poor::show()
{
        cout<<"poor income:"<<this->income<<endl;
}

void rich::set(int i)
{
        income=i;
}

void poor::set(int n)
{
        income=n;
}
void defincome(rich r, poor p)
{
        cout<<r.income-p.income<<endl;
}

int main()
{
        rich a;//1-3行先展示rich类的数9
        a.set(9);
        a.show();
        poor b;//4-6展示poor类的数3
        b.set(3);
        b.show();
       
        defincome(a,b);//输出两者相差
       
        return 0;
       
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-12 23:22:10 | 显示全部楼层

那里为什么要用this指针,用“.”运算符不行吗??就是  rich.income  为什么不行啊

   还有就是friend void defincome(rich,poor);//这里面可以不写对象名的吗??比如(rich r,poor p)可以省略?

大神求回复啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-13 10:13:16 | 显示全部楼层
rich.income那是在静态方法里才用的;
至于defincome函数,还是那句话,
如果不写对像名,如果你定义了两个rich,
如 , rich a, b;
poor c;
那么程序怎么知道你要相减的是a, c,     还是b, c 呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-13 12:18:24 | 显示全部楼层
友来友网 发表于 2013-5-12 16:39
你这个defincome函数显然有问题,
举个例子,假如你在main函数里
这样写

谢谢了....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-28 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表