C++(十七)之设计一个立方体类

今天我们主要讲解如何设计一个相对完整的类。

但是没有分文件编写。

这其中需要注意的是,我们在重载函数的时候,

在参数传递这块,在内存的消耗上面有所不同。

具体分析在程序中有注释部分需要认真看下。

 

/****************************************************
 * brief  : 设计一个立方体类 
 * author : shao 
 * date   :	2020-02-25
 * note   : none
 *
 ****************************************************/
#include <iostream>

using namespace std;

class Cube{
	
private:
	int cube_length;
	int cube_width;
	int cube_height;
	
public:
	int getCubeLength(void)
	{
		return cube_length; 	
	} 
	
	int getCubeWidth(void)
	{
		return cube_width;
	}
	
	int getCubeHeight(void)
	{
		return cube_height;
	}

	void setCubeLength(int length)
	{
		cube_length = length;
	}
	
	void setCubeWidth(int width)
	{
		cube_width = width;
	}
	
	void setCubeHeight(int height)
	{
		cube_height = height;
	}
	
	void getCubeVolume(void)
	{
		int ret1;
		
		ret1 = cube_length * cube_width * cube_height;
		cout << "Cube volume is: " << ret1 << endl;
	}
	
	void getCubeSquare(void)
	{
		int ret1;
		
		ret1 = 2*(cube_length * cube_width + cube_length * cube_height + cube_width * cube_height);
		cout << "Cube square is : " << ret1 << endl;
	}
	
	
	
	bool isCubeEqual(Cube c)
	{
		if(cube_length == c.getCubeLength() &&
		   cube_width  == c.getCubeWidth()  &&
		   cube_height == c.getCubeHeight() )
		{
			return true;
		}
	
		return false;
	} 

};

//======================1.测试Cube的功能是否正常================================
void test01(void)
{
	Cube c1;
	
	c1.setCubeLength(10);
	c1.setCubeWidth(10);
	c1.setCubeHeight(10);
	
	c1.getCubeVolume();
	c1.getCubeSquare();
}
//==============================================================================


//======================2.外部函数测试两个Cube是否相等==========================
//方法1 
bool isCubeEqual(Cube c1, Cube c2)
{
	if(c1.getCubeLength() == c2.getCubeLength() &&
	   c1.getCubeWidth()  == c2.getCubeWidth()  &&
	   c1.getCubeHeight() == c2.getCubeHeight() )
	{
		return true;
	}
	
	return false;
	
} 

//方法2
bool isCubeEqual2(Cube &c1, Cube &c2)
{
	if(c1.getCubeLength() == c2.getCubeLength() &&
	   c1.getCubeWidth()  == c2.getCubeWidth()  &&
	   c1.getCubeHeight() == c2.getCubeHeight() )
	{
		return true;
	}
	
	return false;	
} 

//方法3  
bool isCubeEqual2(Cube *c1, Cube *c2)
{
	if(c1->getCubeLength() == c2->getCubeLength() &&
	   c1->getCubeWidth()  == c2->getCubeWidth()  &&
	   c1->getCubeHeight() == c2->getCubeHeight() )
	{
		return true;
	}
	
	return false;
} 

void test02(void)
{
	Cube c1;
	
	c1.setCubeLength(10);
	c1.setCubeWidth(10);
	c1.setCubeHeight(10);
	
	Cube c2;
	
	c2.setCubeLength(10);
	c2.setCubeWidth(10);
	c2.setCubeHeight(11);
	
	//bool ret = isCubeEqual(c1, c2);
	
	//bool ret = isCubeEqual2(c1, c2);
	
	//bool ret = isCubeEqual2(&c1, &c2);
	
	bool ret = c1.isCubeEqual(c2);
	
	/*
	 * 注:这里要解释一下方法1到方法3... 
	 *     方法1中我们使用的是类的传递方式是值传递:
	 *      这种方法类似于我们的普通参数的值传递,效果一样。、
	 *      在函数调用的时候,会开辟两个空间,分别用来存放c1和c2这两个对象。
	 *     方法2中使用的是引用传递,其实就是对象的指针传递。
	 *     函数调用的时候,将对象c1,c2在内存上分配的地址传递到方法2的函数中。
	 *     方法3和方法2的原理一样,只是一个是指针类型,一个是引用类型。
	 *     而引用其实也是常量指针的变换形式而已。
	 *  
	 *     这其中还有一点要注意,虽然都是重载的函数。但是方法1和方法2在调用的时候
	 *     会出现二义性,所以编译器是过不去的。这里要注意一下,程序员在编写程序的
	 *     时候要避免这样的情况出现。 
	 */
	
	
	if(ret)
		cout << "Cube is equal!" << endl;
	else
		cout << "Cube is not equal!" << endl;
} 
//==============================================================================


int main(void)
{
	test01();
	
	test02();
		
	return 0; 
} 

结果如下:

C++(十七)之设计一个立方体类 

 

C++(十七)之设计一个立方体类C++(十七)之设计一个立方体类 shao15232_1 发布了93 篇原创文章 · 获赞 2 · 访问量 4463 私信 关注
上一篇:带参数的宏


下一篇:STM32CubeMX AI尝尝鲜