注册 登录
编程论坛 C++教室

好难一个问题呀!!

lpf10101 发布于 2007-03-15 23:07, 492 次点击
请各位大侠帮忙看一下,为什么执行出来不是:
调用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;
}
3 回复
#2
虫虫飞ya飞2007-03-17 10:57

只能这么说一句,这是个很混乱的字母组合,不是代码,因为太乱我感觉我不是在改基本是重新做了一遍...因为今天我思维比较混乱所以只是稍微做了下..因为比较懒成员变量用的是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;
}

[此贴子已经被作者于2007-3-17 11:41:06编辑过]

#3
wfpb2007-03-17 12:17

friend void operator -(person&);

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

#4
Arcticanimal2007-03-17 20:27
声明的friend void operator -(person)并不是成员函数,只是一个友元函数
友元函数与成员函数不同,成员函数调用成员变量是传址调用,而友元函数(除了能访问类的私有变量与普通函数没不同)只是传值调用。也就是说传给operator -(person)的只是person的一个副本
当然也就不能改变person的值了

[此贴子已经被作者于2007-3-17 20:28:40编辑过]

1