| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1623 人关注过本帖
标题:符号重载问题
只看楼主 加入收藏
body202
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-21
收藏
 问题点数:0 回复次数:8 
符号重载问题
程序实现的是用符号重载方法求三角形方形面积的和
问题和程序如下:
#include<iostream.h>
#include<math.h>
class Triangle
{
int x,y,z;
double area;
public:
Triangle(){}
Triangle(int i,int j,int k)
{
double s;
x=i;y=j;z=k;
s=(x+y+z)/2.0;
area=sqrt(s*(s-x)*(s-y)*(s-z));
}
void disparea()
{
cout<<"Area="<<area<<endl;
}
friend Triangle operator+(Triangle t1,Triangle t2) //函数重载,应该就是这个函数有问题
{ //语法没错误,可能是违反什么规则了
static Triangle st; // 请帮检查一下
st.area=t1.area+t2.area;
return st;
}
};
void main()
{
Triangle t1(3,4,5),t2(4,5,6), t3(5,6,7);
Triangle s;
cout<<"t1:"; t1.disparea();
cout<<"t2:"; t2.disparea();
cout<<"t3:"; t3.disparea();
s=t1+t2+t3; // 调试的时候是这句有误,我觉得应该是上面那个重载函数
cout<<"总面积="<<s<<endl; //弄错了,要改的话应该怎么该呢?
}

[此贴子已经被作者于2007-10-5 23:00:24编辑过]

搜索更多相关主题的帖子: Triangle 符号 int area 重载 
2007-10-05 21:58
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
cout<<"总面积="<<s<<endl; //你重载了<<操作符吗?


+重载那里用什么static?

Fight  to win  or  die...
2007-10-05 22:21
DieHeart
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-10-4
收藏
得分:0 
两个面积的和返回一个形状干什么呀
2007-10-05 22:29
body202
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-21
收藏
得分:0 
被楼上两位说蒙了
“+重载那里用什么static?”
答:用来控制面积,如果只是两个面积相加就不用STATIC,现在是三个!
我这里用了符号重载
friend Triangle operator+(Triangle t1,Triangle t2)
不知道和后面的调用搭不搭配!
还有3楼能不能说的详细一点!
2007-10-05 22:59
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用body202在2007-10-5 22:59:06的发言:
“+重载那里用什么static?”
答:用来控制面积,如果只是两个面积相加就不用STATIC,现在是三个!

不懂,完全没必要用static,虽然这里没什么关系。
你的重载+是没有问题的。

你还没搞清楚你为什么同不过编译吗?

因为你没有重载"<<",而使用了 cout << 对象;


Fight  to win  or  die...
2007-10-05 23:09
body202
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-21
收藏
得分:0 
我知道提示是“<<”出错,但不知道为什么,我还以为是其他什么地方错了
为什么下面的程序“<<”不用重载“<<”呢?请指点。

#include<iostream.h>
#include<math.h>
class Triangle
{
int x,y,z;
double area;
public:
Triangle(int i,int j,int k)
{
double s;
x=i;y=j;z=k;
s=(x+y+z)/2.0;
area=sqrt(s*(s-x)*(s-y)*(s-z));
}
void disparea()
{
cout<<"Area="<<area<<endl;
}
friend double operator+(Triangle t1,Triangle t2)
{
return t1.area+t2.area;
}
};
void main()
{
Triangle t1(3,4,5),t2(4,5,6);
double s;
cout<<"t1:"; t1.disparea();
cout<<"t2:"; t2.disparea();
s=t1+t2;
cout<<"总面积="<<s<<endl;
}
2007-10-05 23:53
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
多看看书吧,

虽然他们都叫s,但是一个是自定义类对象,一个是double

Fight  to win  or  die...
2007-10-06 00:20
body202
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-21
收藏
得分:0 
好的,谢谢!
2007-10-06 00:22
body202
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-21
收藏
得分:0 

谢谢楼上各位指点,程序调试成功了,原来是那么低级的错误啊,
不过,还是有了一定的收获,至少对重载更熟悉了。现在把正确的程序放上来
留个纪念吧!
#include<iostream.h>
#include<math.h>
class Triangle
{
int x,y,z;
double area;
public:
Triangle(){}
Triangle(int i,int j,int k)
{
double s;
x=i;y=j;z=k;
s=(x+y+z)/2.0;
area=sqrt(s*(s-x)*(s-y)*(s-z));
}
void disparea()
{
cout<<"Area="<<area<<endl;
}
friend Triangle operator+(Triangle t1,Triangle t2)
{
static Triangle st;
st.area=t1.area+t2.area;
return st;
}
friend void zarea(Triangle &s)
{
cout<<s.area<<endl;
}
};
void main()
{
Triangle t1(3,4,5),t2(4,5,6), t3(5,6,7);
Triangle s;
cout<<"t1:"; t1.disparea();
cout<<"t2:"; t2.disparea();
cout<<"t3:"; t3.disparea();
s=t1+t2+t3;
cout<<"总面积="<<endl;
zarea(s);
}
2007-10-06 00:57
快速回复:符号重载问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017034 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved