2014-10-27 87 views
0

我无法弄清楚这一点。我试图重新创建“复杂”的C++类和这些功能。什么时候使用const函数之前,当你不应该

例如: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 double real(const MyComplex& obj){ 
    return obj.real; 
} 

其他功能非常相似。

+0

它基本上意味着你正在返回const double,所以你不能写入它(除非你从值afaik复制) – Creris 2014-10-27 20:54:39

+0

顺便说一下,这些函数不是'const'限定的,返回值是。对于被const限定的函数,它将被声明为'... double real(...)const;'在最后用'const'声明。 – clcto 2014-10-27 20:56:14

+1

@clcto:...它甚至不是非成员函数的有效签名。 – 2014-10-27 20:58:38

回答

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正确记录,只是踢这些朋友,你不需要他们,你不需要他们。

0

没有理由返回const内建类型或对象。

1

你的设计很糟糕。

你应该改变什么:

getRealgetImag应该是const -member函数(添加参数列表后的预选赛)。

所有这些friend功能不应该那么友好,只需使用公共接口来实现它们。
(记住封装意味着最小化依赖于类内部细节的代码量。)

无论如何,有很少的理由有const -qualified返回型。我从来没有过。
使返回类型const甚至有时可能会破坏事情。

相关问题