gpt4 book ai didi

c++ - C++ 中的结构和运算符重载

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:30 25 4
gpt4 key购买 nike

struct PT 
{
double x, y;
PT() {}
PT(double x, double y) : x(x), y(y) {}
PT(const PT &p) : x(p.x), y(p.y) {}
PT operator + (const PT &p) const { return PT(x+p.x, y+p.y); }
PT operator - (const PT &p) const { return PT(x-p.x, y-p.y); }
PT operator * (double c) const { return PT(x*c, y*c ); }
PT operator / (double c) const { return PT(x/c, y/c ); }
};

此代码片段来自http://stanford.edu/~liszt90/acm/notebook.html#file8 .我无法理解这段代码。有人请解释一下。我知道这是运算符重载,但我无法理解运算符重载究竟是如何发生的。

谁也可以解释一下这些行:

PT() {}  
PT(double x, double y) : x(x), y(y) {}
PT(const PT &p) : x(p.x), y(p.y) {}

结构体也有构造函数吗?

最佳答案

double x, y;  

声明两个组成类的局部类变量。

PT() {}  

默认构造函数。允许您创建不带任何参数的 PT。
例如--> PT myObj;

PT(double x, double y) : x(x), y(y) {}  

从两个 double 创建一个点的构造函数。
例如--> PT myObj(3.5, 9.0);
声明后 --> PT(double x, double y) : x(x), y(y) {}
我们有初始化 .--> PT(double x, double y) : x(x), y(y) {}
x(x) 等价于this->x = x;
即用构造函数参数“x”初始化类变量“x”。令人困惑的是,他们为参数赋予了与类变量相同的名称。一个更好的例子可能是:

    PT(double xInit, double yInit) 
: x(xInit)
, y(yInit)
{
}



    PT(const PT &p) : x(p.x), y(p.y)    {}  

复制构造函数以从另一个 PT 对象创建 PT 对象
例如--> PT myOtherObj(myObj);

PT operator + (const PT &p)  const { return PT(x+p.x, y+p.y); }  
PT operator - (const PT &p) const { return PT(x-p.x, y-p.y); }

加法和减法运算符得到两点的和或差,以求出第三个。
例如--

    PT sumObj  = myObj + myOtherObj;
PT diffObj = myObj - myOtherObj;



PT 运算符 * (double c) const { return PT(x*c, y*c ); }
PT 运算符/(double c) const { return PT(x/c, y/c ); }

乘法和除法运算符将一个点乘以(或除以)一个常数。
例如--

    PT prodObj = myObj * 2.7;
PT divObj = myObj / 8.0;

关于c++ - C++ 中的结构和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com