程序内容:
#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
class Triangle{
private:
float A,B,C;
public:
Triangle(float a,float b,float c)
{
A=a;B=b;C=c;
}
void perimeter(float a,float b,float c);
void area(float a,float b,float c);
};
void Triangle::perimeter(float a,float b,float c)
{
cout<<endl<<"Perimeter is:"<<A+B+C <<endl;
}
void Triangle::area(float a,float b,float c)
{
cout<<endl<<"area is :"<<sqrt((A+B+C)*(A-B+C)*(-A+B+C)*(A+B-C))/4.0;
}
int _tmain(int argc, _TCHAR* argv[])
{ float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
Triangle t;
t.area(a,b,c);
t.perimeter(a,b,c);
return 0;
}调试结果:
1>g:\c++\c++2010使用\三角形类\三角形类\三角形类.cpp(38): error C2512: “Triangle”: 没有合适的默认构造函数可用
1>
1>生成失败。
1>
1>已用时间 00:00:01.84
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
class Triangle{
private:
float A,B,C;
public:
Triangle(float a,float b,float c)
{
A=a;B=b;C=c;
}
void perimeter(float a,float b,float c);
void area(float a,float b,float c);
};
void Triangle::perimeter(float a,float b,float c)
{
cout<<endl<<"Perimeter is:"<<A+B+C <<endl;
}
void Triangle::area(float a,float b,float c)
{
cout<<endl<<"area is :"<<sqrt((A+B+C)*(A-B+C)*(-A+B+C)*(A+B-C))/4.0;
}
int _tmain(int argc, _TCHAR* argv[])
{ float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
Triangle t;
t.area(a,b,c);
t.perimeter(a,b,c);
return 0;
}调试结果:
1>g:\c++\c++2010使用\三角形类\三角形类\三角形类.cpp(38): error C2512: “Triangle”: 没有合适的默认构造函数可用
1>
1>生成失败。
1>
1>已用时间 00:00:01.84
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
改成
Triangle t(a, b, c);
#include<iostream>
#include<cmath>
using namespace std;class Triangle{
private:
float A,B,C;
public:
void perimeter(float a,float b,float c);
void area(float a,float b,float c);
};void Triangle::perimeter(float a,float b,float c)
{
cout<<endl<<"Perimeter is:"<<A+B+C <<endl;
}void Triangle::area(float a,float b,float c)
{
cout<<endl<<"area is :"<<sqrt((A+B+C)*(A-B+C)*(-A+B+C)*(A+B-C))/4.0;
}Triangle t;
int _tmain(int argc, _TCHAR* argv[])
{ float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
t.area(a,b,c);
t.perimeter(a,b,c);
return 0;
}
后来总调试功了,但面积和周长显示为0是怎么回事
area和perimeter里根本没用到a、b、c
一是将A、B、C分别换成a、b、c
如果不想用构造函数传入a、b、c给A、B、C,可以增加一个方法
setValue(float a,float b,float c)
{
A = a;
B = b;
C = c;
}
而此时area和perimeter的参数可以去掉还有一开始用了下面这构造函数
Triangle(float a,float b,float c)
{
A=a;B=b;C=c;
}
则可以把Triangle t;放到_tmain函数里
int _tmain(int argc, _TCHAR* argv[])
{ float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
Triangle t(a,b,c);
t.area(a,b,c); //设计得很乱,既然用A、B、C,为什么又要搞个参数
t.perimeter(a,b,c); //乱
return 0;
}
应该也可以的,你定义的成员变量貌似没有意思。
正确的是:
#include<iostream>
#include<cmath>using namespace std;
class Triangle{
private:
float A,B,C;
public:
Triangle(float a,float b,float c)
{
A=a;B=b;C=c;
};
void perimeter(float a,float b,float c);
void area(float a,float b,float c);
};void Triangle::perimeter(float a,float b,float c)
{
cout<<endl<<"Perimeter is:"<<a+b+c<<endl;
}void Triangle::area(float a,float b,float c)
{
cout<<endl<<"area is :"<<sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))/4.0;
}
int _tmain(int argc, _TCHAR* argv[])
{
float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
Triangle t(a,b,c);
t.area(a,b,c);
t.perimeter(a,b,c);
getchar();
return 0;
}可是还有疑问:#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
class Triangle{
private:
float A,B,C;
public:
void perimeter(float a,float b,float c);
void area(float a,float b,float c);
};void Triangle::perimeter(float a,float b,float c)
{
cout<<endl<<"Perimeter is:"<<a+b+c<<endl;
}void Triangle::area(float a,float b,float c)
{
cout<<endl<<"area is :"<<sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))/4.0;
}
int _tmain(int argc, _TCHAR* argv[])
{
float a,b,c;
cout<<"Please input lengths of side:"<<endl;
cin>>a>>b>>c;
Triangle t;
t.area(a,b,c);
t.perimeter(a,b,c);
getchar();
return 0;
}
把构造函数删了,而且在建立对象的时候没有写成Triangle t(a,b,c);
为什么没用到A,B,C
因为你的两个函数直接带参进来了,所以类自身的A\B\C是成员都用不上了。