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

?搞不明白 五六行什么意思?

niu91 发布于 2011-04-30 12:30, 423 次点击
程序代码:
#include<fstream>
#include<iostream>
#include<cmath>
using namespace std;
class triangle;//这一行的作用是什么
ostream& operator<<(ostream& output,triangle& obj);//这一行的作用又是什么
class triangle
{
public:
    triangle(double x,double y,double z)//构造函数传参
    {a=x;b=y;c=z;}   
    friend ostream& operator<<(ostream&,triangle&);//声明运算符<< 重载为友元函数
private:
    double a,b,c;
};
ostream& operator<<(ostream& output,triangle& obj)

{
    double p;
    cout<<"三角形的各边长是:";
    output<<obj.a<<"  ";
    output<<obj.b<<"  ";
    output<<obj.c<<"  ";
    p=(obj.a+obj.b+obj.c)/2;
    output<<"三角形的面积是:"<<sqrt(p*(p-obj.a)*(p-obj.b)*(p-obj.c));
    return output;
}
int main()
{
    triangle c1(3,4,5);
    cout<<c1<<endl;
    return 0;
}
3 回复
#2
pangding2011-04-30 13:27
第五行的語法叫 向前声明(forward declarations) 或者 向前引用。
下面的函数声明 operator<< 不是用了类参数吗,但那会类还没定义呢,就要求加上这么一句。这句话就是给那个函数看的。

第六行那个是函数声明。就像一般的函数可以 main 前声明, main 后定义一样。
这个函数就是在类前声明,在类后实现的。这个不是必要的,但很多人推荐这么写。有些场合这种語法必须使用。
#3
niu912011-04-30 13:37
那两行在VC6.0 以上的版本中是可以不写的。
在VC6.0中前六行可以这样写
#include<fstream>
#include<iostream>
#include<cmath>
using namespace std;
class triangle;//这一行的作用是什么
ostream& operator<<(ostream& output,triangle& obj);//这一行的作用又是什么
 也可以把前六行这样写成三行  
#include<fstream>
#include<iostream.h>
#include<cmath>
#4
pangding2011-04-30 13:46
你是说连 using namespace std; 都可以不要?!

声明的那两行是可以不写。本来友元函数就可以定义在类的后面。
1