免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5025 | 回复: 26
打印 上一主题 下一主题

[C++] 这是 友元吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-17 20:11 |只看该作者 |倒序浏览
本帖最后由 zwjzwj19891228 于 2014-02-17 20:11 编辑
  1. class Person
  2. {
  3. public:
  4.     friend void show(Person *p1)
  5.     {   
  6.         cout << "hello" << endl;
  7.     }   
  8. };

  9. int main()
  10. {
  11.     Person p1;
  12.     show(&p1);
  13.     return 0;
  14. }
复制代码
这个是友元吗,要是友元的话,为什么  我不能变成
  1. class Person
  2. {
  3. public:
  4.     friend void show()
  5.     {   
  6.         cout << "hello" << endl;
  7.     }   
  8. };

  9. int main()
  10. {
  11.     Person p1;
  12.     show();
  13.     return 0;
  14. }
复制代码
还请 高手教教

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [报告]
发表于 2014-02-18 08:12 |只看该作者
是友元,
一般写做
  1. class Person
  2. {
  3. private:
  4.     int member;
  5. public:
  6.     friend void show(Person *p1);
  7. };

  8. friend void show(Person *p1)
  9. {   
  10.     p1->member =100;
  11.     cout << "hello," << p1->member << endl;
  12. }  

  13. int main()
  14. {
  15.     Person p1;
  16.     show(&p1);
  17.     return 0;
  18. }
复制代码
为什么不能写做show();
因为参数不同噬

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [报告]
发表于 2014-02-18 08:12 |只看该作者
是友元,
一般写做
  1. class Person
  2. {
  3. private:
  4.     int member;
  5. public:
  6.     friend void show(Person *p1);
  7. };

  8. friend void show(Person *p1)
  9. {   
  10.     p1->member =100;
  11.     cout << "hello," << p1->member << endl;
  12. }  

  13. int main()
  14. {
  15.     Person p1;
  16.     show(&p1);
  17.     return 0;
  18. }
复制代码
为什么不能写做show();
因为参数不同噬

论坛徽章:
0
4 [报告]
发表于 2014-02-18 10:20 |只看该作者
不是,我是这个意思
  1. class Person
  2. {
  3. public:
  4.     friend void show()
  5.     {   
  6.         cout << "hello" << endl;
  7.     }   
  8. };

  9. int main()
  10. {
  11.     Person p1;
  12.     show();
  13.     return 0;
  14. }
复制代码
这样参数应该是对的,为啥不行回复 3# folklore


   

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
5 [报告]
发表于 2014-02-18 10:42 |只看该作者
友元是可以访问类中的成员,你这个函数没有访问类中的任何成员
回复 4# zwjzwj19891228


   

论坛徽章:
0
6 [报告]
发表于 2014-02-18 11:20 |只看该作者
是一定 要访问的吗,应该是可以不访问的吧,这也不至于错吧回复 5# kdkgod


   

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
7 [报告]
发表于 2014-02-18 11:41 |只看该作者
回复 6# zwjzwj19891228
那第二次写的show是那个类里面的成员函数
你在main里面直接写show当然不行!!
要加p1.show()才行
而且你第二种写法应该不是友元(这个俺不肯定!)

   

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
8 [报告]
发表于 2014-02-18 11:46 |只看该作者
回复 4# zwjzwj19891228

友元函数是声明某个函数(类外的函数或者其他类的函数)是当前这个类的友元函数
你这样的写法明显没有意义(这个函数就是当前类的,你这样有没有错不知道,可能是错的,没上机测试)
然后是你在main里面调用show();肯定不行,要用p1.show();
因为show()函数是属于Person类的!

   

论坛徽章:
6
寅虎
日期:2013-10-10 21:59:16狮子座
日期:2013-11-12 09:24:41金牛座
日期:2013-12-14 17:02:23酉鸡
日期:2014-01-16 12:34:37技术图书徽章
日期:2014-02-15 12:52:31巨蟹座
日期:2014-05-17 14:09:52
9 [报告]
发表于 2014-02-18 12:17 |只看该作者
回复 5# kdkgod


    照你这么说,这个应该是友元了吧。
class Person
{
        int a;
public:
    friend void show(){
    Person p1;
    cout << p1.a;
}
   
};

一旦在形式上声明为友元,哪它当然就是友元函数了。只不过在具体的语法上,会有一些细致的区别。
class Person
{
public:
    friend void show();
   
}
void show(){
cout << "hello";
}
其实只是scope的处理不同罢了。

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
10 [报告]
发表于 2014-02-18 13:37 |只看该作者
这些不就是c++被人诟病的地方吗? 这种说不清楚,或者说不合逻辑的东西,不如摈弃!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP