设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 435|回复: 3
打印 上一主题 下一主题

好难一个问题呀!!

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-5 00:21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请各位大侠帮忙看一下,为什么执行出来不是:
调用negative()取负成员函数前:5
调用negative()取负成员函数后:-5
#include<iostream>
using namespace std;
class person
{friend void operator -(person);
private:
int iapple;
public:
person(int iapple);//声明无参数构造符原型
void operator -();//声明成员变量取负数函数
void display();//声明显示成员变量函数
};
void operator -(person);
int main()
{person xiaowang(5);
cout<<"\n调用negative()取负成员函数前"<<endl;
xiaowang.display();
operator -(xiaowang);
cout<<"\n调用negative()取负成员函数后"<<endl;
xiaowang.display();
system("pause");
return 0;
}
person::person(int iapple)
{this->iapple=iapple;
}
void operator -(person p1)
{p1.iapple=-p1.iapple;
}
void person::display()
{cout<<"iapple="<<iapple<<endl;
}
2#
发表于 2009-11-5 00:21:41 | 只看该作者
只能这么说一句,这是个很混乱的字母组合,不是代码,因为太乱我感觉我不是在改基本是重新做了一遍...因为今天我思维比较混乱所以只是稍微做了下..因为比较懒成员变量用的是pulice,如果要用private还要你自己在改下
#include<iostream>
using namespace std;
class person
{
public:
int iapple;
public:
person(int a);//声明无参数构造符原型
void nev(int b);//声明成员变量取负数函数
void display();//声明显示成员变量函数

};
person::person(int a)
{
iapple=a;
}
void person::nev(int b)
{
iapple=-b;
}
void person::display()
{
cout<<"iapple="<<iapple<<endl;
}

int main()
{
person xiaowang(5);
cout<<"\n调用negative()取负成员函数前"<<endl;
xiaowang.display();
xiaowang.nev(xiaowang.iapple);
cout<<"\n调用negative()取负成员函数后"<<endl;
xiaowang.display();
system("pause");
return 0;
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-5 00:21:43 | 只看该作者
friend void operator -(person&);

传一个引用吧,要不然函数返回后,person的值还是没变
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-5 00:21:45 | 只看该作者
声明的friend void operator -(person)并不是成员函数,只是一个友元函数
友元函数与成员函数不同,成员函数调用成员变量是传址调用,而友元函数(除了能访问类的私有变量与普通函数没不同)只是传值调用。也就是说传给operator -(person)的只是person的一个副本
当然也就不能改变person的值了
回复 支持 反对

使用道具 举报

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

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 07:48 , Processed in 0.109567 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

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