C++ learns to use object arrays, object pointers, this pointers, objects as function parameters, friends and other features for programming.

1. Problem description:

(1) Design circle, rectangle, and triangle classes, calculate perimeter and area, declare their objects, and use these objects.

(2) Declare the object array and object pointer of the class in (1), and use them.

(3) Declare the area function as their friend function to implement the function of calculating the area.

(4) Design interactions and prompts. Users can "input" graphics, "query" graphics and "delete" graphics, and the system "outputs" information.

2. Specific solutions:
1. When designing a circular class, you need to pay attention to declaring friend functions and defining them outside the class.
class Circle
{
public:
	Circle()
	{
		
	}
	Circle(float radius)//Circle类的构造函数 初始化半径radius 
	{
		if(radius>0)
		{
			this->radius=radius;
		}
		else
		{
			this->radius=1;
		}
	}
	float getPerimeter()//计算圆的周长 
	{
		return 2*E*radius;
	}	
	friend float getArea1(Circle t1);//声明友元函数:计算圆的面积 
private:
	float radius;//圆的半径 
};

float getArea1(Circle t1)
{
	return E*t1.radius*t1.radius;//利用对象t1调用私有成员计算面积 
}
2. Design rectangle type
class Rectangle
{
public:
	Rectangle()
	{
		
	}
	Rectangle(float length,float width)//Rectangle类的构造函数 初始化长和宽 
	{
		if(width<=0)
		{
			this->width=1;
		}
		else if(length<=0)
		{
			this->length=1;
		}
		else
		{
			this->width=width;
			this->length=length;
		}
	}
	float getPerimeter()//计算长方形的周长 
	{
		return 2*width+2*length;
	}	
	friend float getArea2(Rectangle t2);//声明友元函数:计算长方形的面积 	
private:
	float width;//长方形的宽 
	float length;//长方形的长 
};
float getArea2(Rectangle t2)
{
	return t2.width*t2.length;//利用对象t2调用私有成员计算面积 
}
3. To design a triangle class, you need to learn to use Heron's formula to calculate and find the area of ​​three known sides.
class Triangle
{
public:
	Triangle()
	{
		
	}
	Triangle(float side_1,float side_2,float side_3)//Triangle类的构造函数 初始化三角形的三条边 
	{//用if else语句保证三条边的长度大于0 
		if(side_1<=0) 
		{
			this->side_1=1;
		}
		else if(side_2<=0)
		{
			this->side_2=1;
		}
		else if(side_3<=0)
		{
			this->side_3=side_3;
		}
		else
		{
			this->side_1=side_1;
			this->side_2=side_2;
			this->side_3=side_3;
		}
	}
	float getPerimeter()//计算三角形的周长 
	{
		return side_1+side_2+side_3;
	}
	
	friend float getArea3(Triangle t3);//声明友元函数:计算三角形的面积 

private:
	float side_1;//三角形的三条边 
	float side_2;
	float side_3;
};
float getArea3(Triangle t3)
{
	float s;
	float area;//用海伦公式 利用三边来计算面积 
	s=t3.getPerimeter()/2;
	area = sqrt(s * (s - t3.side_1)*(s - t3.side_2)*(s - t3.side_3) );//利用对象t3调用私有成员计算面积 
	return area;
}	
4. Test program.
int main()
{	
	
	cout<<"***你想输入的图形为:***"<<endl
		<<"******圆形---请输入1***"<<endl 
		<<"****长方形---请输入2***"<<endl
		<<"****三角形---请输入3***"<<endl
		<<"******退出---请输入0***"<<endl<<endl;
	//以下两行为规定输出格式,保留小数点后两位
	//注意:设置精度语句只需写一次就可以了,对后面的数字都有效 
	cout.setf(ios::fixed);
	cout<<setprecision(2);
	int k=-1; 
	while(k!=0)
	{
		cout<<"请输入你的选择:"; 
		cin>>k;
		switch(k)
		{
			case 1://如为某个case分支定义并初始化一个变量,应该把变量定义在块内,确保后面的所有case标签都在变量的作用域之外。注意case后加{}!!! 
				{	
					//圆形 
					float R;//半径 
					int n;
					cout<<"请输入你所需要输入的圆形的个数:"<<endl;
					cin>>n; 
					Circle *a=new Circle[n]; //创建对象数组,每个元素都是一个Circle对象 
					cout<<"请输入圆形的半径(用空格隔开):"<<endl;
					for(int i=0;i<n;i++)
					{
						cin>>R;	
						a[i]=Circle(R);					
					}
					Circle *p1;//使用对象指针 
					for(int j=0;j<n;j++)
					{
						p1= &a[j];
						cout<<"圆形"<<j+1<<"的周长为:"<<a[j].getPerimeter()  <<endl;
						cout<<"圆形"<<j+1<<"的面积为:"<<getArea1(a[j])       <<endl;
					}
					cout<<endl;		 
					delete[] a;//删除整个对象数组,加上[]的作用是表示我要删除整个数组。在这个过程中,对象数组释放,调用析构函数 
				}
				break;
			case 2:
				{
					//长方形	
					float l;//长 
					float w;//宽 
					int n;
					cout<<"请输入你所需要输入的长方形的个数:"<<endl;
					cin>>n; 
					Rectangle *b=new Rectangle[2]; //创建对象数组,每个元素都是一个Rectangle对象 
 					cout<<"请输入长方形的长和宽(用空格隔开):"<<endl; 
 					for(int i=0;i<2;i++)
					{
						cin>>l>>w;	
						b[i]=Rectangle(l,w);					
					}
					Rectangle *p2;//使用对象指针 
					for(int j=0;j<n;j++)
					{
						p2 = &b[j];
						cout<<"长方形"<<j+1<<"的周长为:"<<p2->getPerimeter() 	<<endl;
						cout<<"长方形"<<j+1<<"的面积为:"<<getArea2(b[j])       <<endl;
					}
					cout<<endl;				
					delete[] b;//删除整个对象数组
				}
				break;
			case 3:
				{
					//三角形
					float s1,s2,s3;
					int n;
					cout<<"请输入你所需要输入的三角形的个数:"<<endl;
					cin>>n; 
					Triangle *c=new Triangle[2]; //创建对象数组,每个元素都是一个Triangle对象 
					cout<<"请输入三角形的三条边的边长(用空格隔开):"<<endl;
					for(int i=0;i<n;i++)
					{
						cin>>s1>>s2>>s3;	
						c[i]=Triangle(s1,s2,s3);					
					}
					Triangle *p3; 
					for(int j=0;j<n;j++)
					{
						p3 = &c[j];
						cout<<"三角形"<<j+1<<"的周长为:"<<p3->getPerimeter() 	<<endl;
						cout<<"三角形"<<j+1<<"的面积为:"<<getArea3(c[j])       <<endl;
					}		
					delete[] c;//删除整个对象数组
					cout<<endl;
				}
				break;
			case 0:
				{
					k=0;//退出循环	
				}
				break;
		} 	
	}
	return 0;
}
3. Complete code display.
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
#define E 3.14
//圆形类 
class Circle
{
public:
	Circle()
	{
		
	}
	Circle(float radius)//Circle类的构造函数 初始化半径radius 
	{
		if(radius>0)
		{
			this->radius=radius;
		}
		else
		{
			this->radius=1;
		}
	}
	float getPerimeter()//计算圆的周长 
	{
		return 2*E*radius;
	}	
	friend float getArea1(Circle t1);//声明友元函数:计算圆的面积 
private:
	float radius;//圆的半径 
};
float getArea1(Circle t1)
{
	return E*t1.radius*t1.radius;//利用对象t1调用私有成员计算面积 
}
//长方形类 
class Rectangle
{
public:
	Rectangle()
	{
		
	}
	Rectangle(float length,float width)//Rectangle类的构造函数 初始化长和宽 
	{
		if(width<=0)
		{
			this->width=1;
		}
		else if(length<=0)
		{
			this->length=1;
		}
		else
		{
			this->width=width;
			this->length=length;
		}
	}
	float getPerimeter()//计算长方形的周长 
	{
		return 2*width+2*length;
	}	
	friend float getArea2(Rectangle t2);//声明友元函数:计算长方形的面积 	
private:
	float width;//长方形的宽 
	float length;//长方形的长 
};
float getArea2(Rectangle t2)
{
	return t2.width*t2.length;//利用对象t2调用私有成员计算面积 
}
//三角形类 
class Triangle
{
public:
	Triangle()
	{
		
	}
	Triangle(float side_1,float side_2,float side_3)//Triangle类的构造函数 初始化三角形的三条边 
	{//用if else语句保证三条边的长度大于0 
		if(side_1<=0) 
		{
			this->side_1=1;
		}
		else if(side_2<=0)
		{
			this->side_2=1;
		}
		else if(side_3<=0)
		{
			this->side_3=side_3;
		}
		else
		{
			this->side_1=side_1;
			this->side_2=side_2;
			this->side_3=side_3;
		}
	}
	float getPerimeter()//计算三角形的周长 
	{
		return side_1+side_2+side_3;
	}
	
	friend float getArea3(Triangle t3);//声明友元函数:计算三角形的面积 

private:
	float side_1;//三角形的三条边 
	float side_2;
	float side_3;
};
float getArea3(Triangle t3)
{
	float s;
	float area;//用海伦公式 利用三边来计算面积 
	s=t3.getPerimeter()/2;
	area = sqrt(s * (s - t3.side_1)*(s - t3.side_2)*(s - t3.side_3) );//利用对象t3调用私有成员计算面积 
	return area;
}	
//测试三个类 
int main()
{	
	
	cout<<"***你想输入的图形为:***"<<endl
		<<"******圆形---请输入1***"<<endl 
		<<"****长方形---请输入2***"<<endl
		<<"****三角形---请输入3***"<<endl
		<<"******退出---请输入0***"<<endl<<endl;
	//以下两行为规定输出格式,保留小数点后两位
	//注意:设置精度语句只需写一次就可以了,对后面的数字都有效 
	cout.setf(ios::fixed);
	cout<<setprecision(2);
	int k=-1; 
	while(k!=0)
	{
		cout<<"请输入你的选择:"; 
		cin>>k;
		switch(k)
		{
			case 1://如为某个case分支定义并初始化一个变量,应该把变量定义在块内,确保后面的所有case标签都在变量的作用域之外。注意case后加{}!!! 
				{	
					//圆形 
					float R;//半径 
					int n;
					cout<<"请输入你所需要输入的圆形的个数:"<<endl;
					cin>>n; 
					Circle *a=new Circle[n]; //创建对象数组,每个元素都是一个Circle对象 
					cout<<"请输入圆形的半径(用空格隔开):"<<endl;
					for(int i=0;i<n;i++)
					{
						cin>>R;	
						a[i]=Circle(R);					
					}
					Circle *p1;//使用对象指针 
					for(int j=0;j<n;j++)
					{
						p1= &a[j];
						cout<<"圆形"<<j+1<<"的周长为:"<<a[j].getPerimeter()  <<endl;
						cout<<"圆形"<<j+1<<"的面积为:"<<getArea1(a[j])       <<endl;
					}
					cout<<endl;		 
					delete[] a;//删除整个对象数组,加上[]的作用是表示我要删除整个数组。在这个过程中,对象数组释放,调用析构函数 
				}
				break;
			case 2:
				{
					//长方形	
					float l;//长 
					float w;//宽 
					int n;
					cout<<"请输入你所需要输入的长方形的个数:"<<endl;
					cin>>n; 
					Rectangle *b=new Rectangle[2]; //创建对象数组,每个元素都是一个Rectangle对象 
 					cout<<"请输入长方形的长和宽(用空格隔开):"<<endl; 
 					for(int i=0;i<2;i++)
					{
						cin>>l>>w;	
						b[i]=Rectangle(l,w);					
					}
					Rectangle *p2;//使用对象指针 
					for(int j=0;j<n;j++)
					{
						p2 = &b[j];
						cout<<"长方形"<<j+1<<"的周长为:"<<p2->getPerimeter() 	<<endl;
						cout<<"长方形"<<j+1<<"的面积为:"<<getArea2(b[j])       <<endl;
					}
					cout<<endl;				
					delete[] b;//删除整个对象数组
				}
				break;
			case 3:
				{
					//三角形
					float s1,s2,s3;
					int n;
					cout<<"请输入你所需要输入的三角形的个数:"<<endl;
					cin>>n; 
					Triangle *c=new Triangle[2]; //创建对象数组,每个元素都是一个Triangle对象 
					cout<<"请输入三角形的三条边的边长(用空格隔开):"<<endl;
					for(int i=0;i<n;i++)
					{
						cin>>s1>>s2>>s3;	
						c[i]=Triangle(s1,s2,s3);					
					}
					Triangle *p3; 
					for(int j=0;j<n;j++)
					{
						p3 = &c[j];
						cout<<"三角形"<<j+1<<"的周长为:"<<p3->getPerimeter() 	<<endl;
						cout<<"三角形"<<j+1<<"的面积为:"<<getArea3(c[j])       <<endl;
					}		
					delete[] c;//删除整个对象数组
					cout<<endl;
				}
				break;
			case 0:
				{
					k=0;//退出循环	
				}
				break;
		} 	
	}
	return 0;
}

Guess you like

Origin blog.csdn.net/weixin_74287172/article/details/134175371