Overloading and Function Selection

C++ For C Programmers 4.5 Overloading and Function Selection

1 class point{
2 public:
3 point(double u=0.0):x(u),y(0.0){}
4 ...
5 private double x,y;
6 };

point(double u):x(u),y(0.0) {}是一种隐式类型转换,如果我把u=5赋值给一个point,则会把u=5转换成 point u = (5.0, 0.0).C++会自动帮你转换,但是你也可以尝试在point(double u):x(u), y(0.0){}前加explicit然后使用static_cast<point>(u)进行手动转换。

point ::operator double()
{ return sqrt(x*x + y*y);}

一种把point转换成double的方式,改变了C++double的规则,从此使用d = s; 就会运行,不然的话会报错

class point{
...
private:
double x,y; 
};

ostream& operator<<(ostream& out, const point& p)
{out << "(" << x << y << ")"; return out;}

运行失败,因为x,y是private,不能直接传递给其他函数。

class point{
friend ostream& operator<<(ostream& ..);
private:
double x,y;
};

这个时候就可以使用friend功能,让其变为friend fuction。

class point{
public:
point operator+(point p)
{return point(x+p.x, y+p.y);}
...
private double x,y;
};

使用了member function。相当于是a.oprator + b.x ,只传递一个参数b,不同于使用friend fuction会传递两个参数。我们一般使用friend fuction。如果a是一个point,b是一个double, c是一个point,记得我们可以自动将一个double转换为point,如果使用的是member function则在执行c=b+a;会出错。

posted @ 2019-01-04 21:31  王老吉味巧克力  阅读(127)  评论(0编辑  收藏  举报