在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