编程细节

1. 双精度变量与0的比较:

    const double eps = 0.000000001;
    double         a = 0.00000000001;
    double         b = 0.000000002;

    if (a >= -eps && a <= eps)  // if(a <= -eps || a >= eps)
        cout << "a == 0" << endl;
    else
        cout << "a != 0" << endl;

    if (b >= -eps && b <= eps)
        cout << "b == 0" << endl;
    else
        cout << "b != 0" << endl;

2.参数列表、初始化列表:

.h:
class Complex {
public:          //外部接口
    Complex(double real=0.0, double imag=0.0);
    //另外,带有默认值参数应放在列表的最右端
    //Complex(double real, double imag=0.0)
private:        //私有数据成员
    double real;  //实部
    double imag;  //虚部
}

.cpp:
  //带有默认值参数的函数,在实现的时候,参数上是不能有值的
 error: Complex::Complex(double real=0.0, double imag=0.0){...}
 //另外,只有构造函数能使用初始化列表,其在构造函数执行前执行
    Complex::Complex(double real, double imag)
        :real(real), imag(imag){}

3.重载单目运算符(一元运算符)++ 、--:

  前置与后置的区分:带有整型形参的为后置。

4.重载赋值运算符‘=’:

  (1)首先,需要进行是否是自我赋值操作的验证;

  (2)其次,要释放左操作数的资源:

      方法1 先保存原来的资源,等重新分配资源完成以后再释放以前的资源);

      方法2 采用copy and swap技术.

    (3)返回类型,为了具有连续赋值的效果,一般都返回引用类型。

猜你喜欢

转载自www.cnblogs.com/imimjx/p/9652118.html