今天我们主要讲解如何设计一个相对完整的类。
但是没有分文件编写。
这其中需要注意的是,我们在重载函数的时候,
在参数传递这块,在内存的消耗上面有所不同。
具体分析在程序中有注释部分需要认真看下。
/****************************************************
* 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;
}
结果如下:
shao15232_1 发布了93 篇原创文章 · 获赞 2 · 访问量 4463 私信 关注