• 当构造函数是private对象时,不能用于使用构造函数初始化,即complex c1; 调用构造函数是错误的;当不允许外界创建对象时,可以把构造函数放在private里面;
  • class 函数参数最好引用传值;不想修改值,可用 const complex& 常量的形式。能引用形参的时候优先考虑引用,其次值传递
  • 友元类和友元函数
  • 返回类型*ths
  • 不能传引用的情况:引用和指针传值区分
  • 返回引用

        返回值类型complex(x+real(y), imag(y)) ,类似(int) i,强制转换,创建的是临时对象。

        这个函数返回必须不能是引用,因为返回是临时对象local object

        返回值为值传递,不用引用传递

        两例特殊操作符,只能设置global(全局)函数。问:其他类型是否冲突?

       << 操作符不能是<< const定义,不然ostream& os的os就是常量,每次输出都在改变os的状态,联想:是否跟缓冲区或者cerr和clog有关?

  • //返回ostream的os类型,是为了连续输出 cout<<c1<<conj(c1); conj指共轭复数函数
    //不能是void类型,void类型满足单次输出
    ostream& operator << (ostream& os, const complex& x)
    {
        return os << "(" << real(x) << "+" << imag(x) << 'i'
            << ")";
    }

 

 

  • 带指针的类的编写,拷贝构造/赋值等函数必须自己编写,不能使用编译器的版本;不带指针的类的拷贝函数可以使用编译器的每个字节拷贝的方式,而不用自己编写

        浅拷贝&深拷贝:深拷贝&浅拷贝

  • 拷贝赋值:清空左边原来的内容,生成与右边相同大小的空间,然后右边内容拷贝到左边

       

  • 局部、静态、全局变量:

        1. 局部:在作用域结束之时结束,会被自动清理

        2. 静态:在作用域结束之后仍然存在,直到整个程序结束

        3. 全局:在整个程序结束之后才结束,作用域是整个程序