创建一个Triangle类,里面包含了成员变量三条边长、带参构造函数、判断三角形为哪种三角形以及输出三角形的面积的公有函数。
总结:
1.自己想的太复杂,把能否构成三角形的条件重复了很多次,代码冗余度高。
2.对于C++中的类的使用不够明确,例如将类成员定义较为复杂。
3.要在类中定义的成员变量尽量为最基础的变量,不要设置多余的变量,在这道题中我将三角形所判断的条件以及要输出的面积都设为了成员变量。导致在main函数中使用函数调用了面积这个成员变量,就会造成程序失误。
4.在类的成员变量赋值时或者说初始化时,不能少了默认构造函数,比如说在定义带参构造函数的时候,也要设置默认的构造函数,就相当于变量初始化,少掉不必要的麻烦。
Triangle.h:
class Triangle//定义Triangle类
{
public:
Triangle();
Triangle(int a,int b,int c);
void area();
void juge();
void input();
private:
int a;
int b;
int c;
};
Triangle.cpp:
#include "triangle.h"
#include<iostream>
#include<math.h>
using namespace std;
Triangle::Triangle()
{
a=0;
b=0;
c=0;
}
Triangle::Triangle(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
}
void swap(int m,int n,int p)//交换函数,先将三条边按从小到大的方式进行排序,方便后面的求面积时不需要再确定两短边
{
int temp=0;
if(m>n)
{temp=m;m=n;n=temp;}
if(m>p)
{temp=m;m=p;p=temp;}
if(n>p)
{temp=n;n=p;p=temp;}
}
void Triangle::juge()//判断三角形为哪种三角形
{
if(a+b>c||b+c>a||c+a>b)//判断能否构成三角形
{
swap(a,b,c);
if(a*a+b*b<c*c)//锐角三角形
{
cout<<"Acute triangle";
}
else if(a*a+b*b==c*c)//直角三角形
{
cout<<"Right triangle";
}
else//钝角三角形
{
cout<<"Obtuse triangle";
}
}
else//不是三角形
cout<<"not triangle";
}
void Triangle::area()//计算面积的函数,使用海伦公式,避免了求三角形时不知高的求面积
{
float p, s;
p=(a+b+c)/2.0;
s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"area="<<s<<endl;
}
void Triangle::input()//可替代带参构造函数,使用户自行输入数据
{
cin>>a>>b>>c;
}
main:
#include <iostream>
#include"triangle.h"
using namespace std;
extern void display(Triangle &a);
int main()
{
Triangle x(3,4,5);
x.area();
x.juge();
Triangle d;
d.input();
d.area();
d.juge();
return 0;
}
本题题目要求只需要带参构造函数,但如果是方便的话,由用户输入数据,则使用void input()函数来输入。