C++中构造函数
#include
using namespace std;
class Cube
{
public:
//构造函数的作用,初始化对象的数据
//构造函数名用的是类的名字而不是对象名,无返回值类型。
//无参构造函数
//如果创建一个类没有写任何构造函数,系统会自动生成默认的无参构造函数
//函数为空,什么都不做 ,如果创建的对象是全局对象或者是静态对象
//则会被默认初始化为0,否则值是随机的,和C语言保持着一致
//也可以自己写一个无参构造函数,将数据初始化为0;
Cube()
{
m_A = 0;
m_B = 0;
m_C = 0;
cout << "无参构造函数" << endl;
}
//一般构造函数
//可以函数重载,可传一个参数也可传两个参数,也可类型不同
//只要存在有参构造函数,系统则不会再自动调用无参构造函数
Cube(double a, double b)
{
m_A = a;
m_B = b;
cout << "调用有参构造函数1" << endl;
}
Cube(double a, double b, double c)
{
m_A = a;
m_B = b;
m_C = c;
cout << "调用有参构造函数2" << endl;
}
//拷贝构造函数
//拷贝构造函数一般形如 类名(const 类名 &another)
//拷贝构造函数参数为类对象本身的引用,用于根据一个已存在的对象
//复制出一个新的该对象,将已存在对象数据成员的值赋给新创建对象中的
//数据成员
//调用方式有两种 Cube c2(c1); Cube c2 = c1;
//如果不提供拷贝构造函数,系统会提供一个默认拷贝构造函数
//但提供的是浅拷贝
Cube(const Cube &another)
{
m_A = another.m_A;
m_B = another.m_B;
m_C = another.m_C;
}
void setABC(double a, double b, double c)
{
m_A = a;
m_B = b;
m_C = c;
}
double getA()
{
return m_A;
}
double getB()
{
return m_B;
}
double getC()
{
return m_C;
}
double getVolume()
{
Volume = m_A * m_B * m_C;
return Volume;
}
double getArea()
{
Area = 2 * ((m_A * m_B) + (m_A * m_C) + (m_B * m_C));
return Area;
}
bool judge(Cube &another_c)
{
if(m_A == another_c.getA() &&
m_B == another_c.getB() &&
m_C == another_c.getC())
{
return true;
}
else
{
return false;
}
}
private:
double m_A;
double m_B;
double m_C;
double Area;
double Volume;
};
bool judge(Cube &c1, Cube &c2)
{
if(c1.getA() == c2.getA() &&
c1.getB() == c2.getB() &&
c1.getC() == c2.getC())
{
return true;
}
else
{
return false;
}
}
int main()
{
Cube();
Cube c1(10, 20); //调用有参构造函数 Cube(double a, double b)
c1.setABC(12.3, 15.2, 13.0);
cout << "c1面积是:" << c1.getArea() << endl;
cout << "c1体积是:" << c1.getVolume() << endl;
Cube c2(9.6, 9.8, 3.3); //调用有参构造函数Cube(double a, double b, double c)
c2.setABC(10, 20, 30);
cout << "c2面积是:" << c2.getArea() << endl;
cout << "c2体积是:" << c2.getVolume() << endl;
if(judge(c1, c2) == true)
{
cout << "相同" << endl;
}
else
{
cout << "不相同" << endl;
}
if(c1.judge(c2) == true)
{
cout << "相同" << endl ;
}
else
{
cout << "不相同" << endl;
}
return 0;
}