C++中组合类构造函数定义的一般形式

在C++类的组合小节中讲到:

组合类构造函数定义的一般形式为:

类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),···

{类的初始化}

其中,“内嵌对象1(形参表),雷茜对象2(形参表),···”称为初始化列表,其作用是对内嵌对象进行初始化。

对基本类型的数据成员也可以这样。

按照上述格式,我写了一个类,并且写了一个线段类,两点组成一条线段,并计算其长度。

#include<iostream>
#include<cmath>    
using namespace std;

class Point	    //点
{
private:
	int x, y;
public:
	Point(int xx = 0, int yy = 0):x(xx),y(yy){}    //构造函数
	int getX() { return x; }
	int getY() { return y; }
};

class Line		//线段
{
private:
	Point p1, p2;	//类的组合
	int length;	//线段的长度
public:
	Line(Point xp1, Point xp2):p1(xp1),p2(xp2)	//构造函数
	{
		int a = p1.getX() - p2.getX();
		int b = p1.getY() - p2.getY();
		length = sqrt(a*a + b * b);
	}
	void show()
	{
		cout << "该线段长度为:" << length << endl;
	}
};

int main()
{
	Point p1(1, 1);			//p1点
	Point p2(4, 5);			//p2点

	Line line(p1, p2);		//两点连成线段
	line.show();

	system("pause");
	return 0;
}

刚看到这种写法的时候,我还有点记不住形式,等到某天自己写组合类的构造函数时,早已不记得形式的我,写出来的如下:

#include<iostream>
#include<cmath>
using namespace std;

class Point	//点
{
private:
	int x, y;
public:
	Point(int xx = 0, int yy = 0)	//构造函数
	{
		x = xx;
		y = yy;
	}
	int getX() { return x; }
	int getY() { return y; }
};

class Line				//线段
{
private:
	Point p1, p2;			//类的组合
	int length;			//线段的长度
public:
	Line(Point xp1, Point xp2)	//构造函数
	{
		p1 = xp1;
		p2 = xp2;

		int a = p1.getX() - p2.getX();
		int b = p1.getY() - p2.getY();
		length = sqrt(a*a + b * b);
	}
	void show()
	{
		cout << "该线段长度为:" << length << endl;
	}
};

int main()
{
	Point p1(1, 1);			//p1点
	Point p2(4, 5);			//p2点

	Line line(p1, p2);		//两点连成线段
	line.show();

	system("pause");
	return 0;
}

两种写法对比如下:

第一种 第二种
Point(int xx = 0, int yy = 0):x(xx),y(yy){} 
Point(int xx = 0, int yy = 0)	//构造函数
	{
		x = xx;
		y = yy;
	}
Line(Point xp1, Point xp2):p1(xp1),p2(xp2)	//构造函数
	{
		int a = p1.getX() - p2.getX();
		int b = p1.getY() - p2.getY();
		length = sqrt(a*a + b * b);
	}
Line(Point xp1, Point xp2)	//构造函数
	{
		p1 = xp1;
		p2 = xp2;

		int a = p1.getX() - p2.getX();
		int b = p1.getY() - p2.getY();
		length = sqrt(a*a + b * b);
	}

对比一下,第一种可以减少代码的行数,但是我觉得第二种使得代码比较易懂┗|`O′|┛ 嗷~~。

(/≧▽≦)/,这么简答的问题终于被我写完了。以后见到第一种形式就不会蒙了。O(∩_∩)O









猜你喜欢

转载自blog.csdn.net/An_Ya_Hui/article/details/80066937