我无法弄清楚这一点。我正在尝试重新创建“复杂”的c ++类和那些函数。
例如:real(), imag(), abs()
等将参数用作const complex& obj
。所以我想如果你通过它的引用传递对象,它就不会被复制并节省一点内存并且更快并且在它前面使用const
以避免弄乱那个对象。我对吗?
所以我认为我也可以像这些那样创建我的函数,但为什么那些带有const
参数的函数需要const
才能自己运行?
这是我得到的:
class MyComplex{
private:
double real;
double imag;
public:
MyComplex();
MyComplex(int real);
MyComplex(int real, int imag);
double getReal();
double getImag();
void setReal(int real);
void setImag(int imag);
friend const double real(const MyComplex& obj);
friend const double imag(const MyComplex& obj);
friend const double abs(const MyComplex& obj);
friend const double arg(const MyComplex& obj);
friend const double norm(const MyComplex& obj);
friend const std::string conj(const MyComplex& obj);
friend std::string myPolar(double rho, double theta);
};
如果我不把const放在他们面前,他们就不行了。
const double real(const MyComplex& obj){
return obj.real;
}
其他功能非常相似。
答案 0 :(得分:1)
你的设计很糟糕。
你应该改变什么:
getReal
和getImag
应为const
- 成员函数(在参数列表后添加限定符)。
所有这些friend
- 函数都不应该如此友好,只能使用公共接口实现它们
(请记住,封装意味着根据类内部细节最小化代码量。)
无论如何,很少有理由拥有const
- 合格的返回类型。我从来没有过
使返回类型const
有时甚至可能会破坏。
答案 1 :(得分:0)
没有理由返回const内置类型或对象。
答案 2 :(得分:0)
声明
friend const double real(const MyComplex& obj);
不声明const函数,它声明了一个返回常量值的非const函数。由于您无论如何都按值返回,因此const
毫无用处。
const函数声明如下:
//within the class definition
double getReal() const;
这使隐含参数变为getReal()
,this
指针const
,允许您执行myConstComplex.getReal()
。
而且,正如Deduplicator正确指出的那样,只要踢那些朋友,你就不需要它们而且你不想要它们。