回复 7楼 rjsp
抱歉,这个是代码。
#include <iostream>
#include <cmath>
using namespace std;
class Point {
//Point类定义
public:
Point(int xx = 0, int yy = 0) {
x = xx;
y = yy;
}
Point(Point& p);
int getX() { return x; }
int getY() { return y; }
private:
int x, y;
};
Point::Point(Point& p)
{
//复制构造函数的实现
x = p.x;
y = p.y;
cout << "调用复制构造函数Point" << endl;
}
//类的组合
class Line {
//Line类的定义
public:
//外部接口
Line(Point xp1, Point xp2);
Line(Line& l);
double getLen() { return len; }
private:
//私有数据成员
Point p1, p2;
//Point类的对象p1,p2
double len;
};
//组合类的构造函数
Line::Line(Point xp1, Point xp2) : p1(xp1), p2(xp2)
{
cout << "调用构造函数Line" << endl;
double x = static_cast<double>(p1.getX() - p2.getX());
double y = static_cast<double>(p1.getY() - p2.getY());
len = sqrt(x * x + y * y);
}
Line::Line(Line& l) : p1(l.p1), p2(l.p2)
{//组合类的复制构造函数
cout << "调用复制构造函数Line" << endl;
len = l.len;
}
//主函数
int main() {
Point myp1(1, 1), myp2(4, 5);
//建立Point类的对象
Line line(myp1, myp2);
//建立Line类的对象
Line line2(line);
//利用复制构造函数建立一个新对象
cout << "The length of the line is: ";
cout << line.getLen() << endl;
cout << "The length of the line2 is: ";
cout << line2.getLen() << endl;
return 0;
}
我想的是
//组合类的构造函数
Line::Line(Point xp1, Point xp2) : p1(xp1), p2(xp2)
{
cout << "调用构造函数Line" << endl;
double x = static_cast<double>(p1.getX() - p2.getX());
double y = static_cast<double>(p1.getY() - p2.getY());
len = sqrt(x * x + y * y);
}
这个函数里面出现了getX()两次,getY()两次,于是应该输出四次,但是结果只有两次。