我大概看了一下,有可能错误在这里:
1: 语法错误:
inline void Cpoint::getpoint(int X1,int Y1,int X2,int Y2,int X3,int Y3)
{
cout<<"please input the first point:x1=";
cin>>X1; // 好歹也是 cin>>x1; 小错误吧。。
2: int a1,b1,a2,b2,a3,b3; //这里没有初始化吧。。容易粗错。。
Cpoint lancelot; //这里虽然说调用了构造函数,但是下边,
//在语法改好的情况下,改变了。。。
lancelot.getpoint(a1,b1,a2,b2,a3,b3); //更改坐标值; 有语法错误
3: 最好在构造函数的参数表里边初始化 数据成员;
拿你的例子说就是:
Cpoint::Cpoint():x1(1),y1(0),x2(0),y2(0),x3(0),y3(1)
{}
你的写法,叫赋值,而不是初始化,不知道你理解这两种
写法的实质区别不。。。
在参数列表里边初始化,原因是,如果你写的类是组合类,
也就是说你的类里边,有可能包含了其他类的 对象,
比如说,学生类里边,生日 birthday 就是个 日期对象。。
此时 初始化列表 将调用 birthday 的构造函数,
在释放student 的时候,还会调用析构函数,
而按你的写法纯粹就是赋值了,没调用构造函数,当然也就释放不了
3:
好像vc6 对友元函数支持的不好。。。改用更高版本的vs2005 试试。。
个人愚见。。。祝 君好运。。。
inline void Cpoint::getpoint(int X1,int Y1,int X2,int Y2,int X3,int Y3)
{
cout<<"please input the first point:x1=";
cin>>X1;
cout<<" y1=";
cin>>Y1;
cout<<"please input the second point:x2=";
cin>>X2;
cout<<" y2=";
cin>>Y2;
cout<<"please input the third point:x3=";
cin>>X3;
cout<<" y3=";
cin>>Y3;
}
double square(int x1,int y1,int x2,int y2,int x3,int y3)
{
s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))*sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
return s;
}
double circle(int x1,int y1,int x2,int y2,int x3,int y3)
{
c=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))+sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))+sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
return c;
}
这两个函数要在 class Triangle的定义文件中 进行声明定义 而且也不用声明为友元函数,做成员函数就可以
Cpoint::Cpoint()
{
x1=1;y1=0;
x2=0;y2=0;
x3=0;y3=1;
}
这个也不用这么写, 直接在Cpoin类中定义构造函数时,把x1。。。。。都作为参数。
如Cpoint::Cpoint(int x1,int y1,int x2,int y2,int x3,int y3)
{
x1=1;y1=0;
x2=0;y2=0;
x3=0;y3=1;
}
这样 声明 Cpoint cp=new Cpoint(1,1,2,2,3,3); 即可
把Cpoint类声明为Triangle的友元类,这样在Triangle定义一个Cpoint对象,Triangle类就可以访问这个对象的私有成员,就是3个点的坐标了。把三个点的坐标直接传给那两个函数,计算面积和周长。