C++ Primer Plus(十一)—— 使用类

  1. 不要返回指向局部变量或临时对象的引用,函数执行完毕后,局部变量和临时对象都将消失,引用将指向不存在的数据。函数

  2. C++对用户定义的运算符重载的限制:spa

    1. 重载的运算符没必要是成员函数,但必须至少有一个操做数是用户定义的类型。对象

    2. 使用运算符时不能违反运算符原来的句法规则,不能修改运算符的优先级。接口

    3. 不能建立新的运算符。ci

    4. 不能重载如下的运算符:【sizeof,.,.*,::,?:,typeid,const_casr,dynamic_cast,reinterpret_cast,static_cast】原型

    5. 如下的运算符只能经过成员函数进行重载:【=,( ),[ ],->】it

  3. 若是要为类重载运算符,并将非类的第一项做为其第一个操做数,则能够用友元函数来反转操做数顺序。ast

  4. 只有类声明能够决定哪个函数是友元,所以类声明仍然控制了哪些函数能够访问私有数据;经过使用友元函数和类方法,能够用同一个用户接口表达这两种操做,类方法和友元只是表达类接口的两种不一样机制。变量

  5. 友元要将关键在friend放在原型声明前,但不要在定义中使用关键字friend。权限

  6. 虽然友元函数是在类声明中声明的,但它不是成员函数,一次不能用成员运算符来调用。

    虽然友元函数不是成员函数,但它与成员函数的访问权限相同。

  7. 假设有构造函数Stone(double),若是在类构造函数声明中使用了关键字explicit,则该构造函数只能用于显式强制转换,不然还能够用于下面的隐式转换:

    1. 将对象初始为double值时

    2. 将double值赋给Stone对象时

    3. 将double值传递给接受Stone参数的函数时

    4. 返回值被声明为Stone的函数试图返回double值时

    5. 在上述任意一种状况下,使用可转换为double类型的内置类型时

  8. 被称为转换函数的特殊类成员运算符函数,用于将类对象转换为其余类型,它没有返回类型、没有参数,名为operator typeName( ),其中typeName是对象将被转换成的类型,将类对象赋值给typeName变量或将其强制转换为typeName类型时,该转换函数将自动调用。

  9. 提供执行自动、隐式转换的函数所存在的问题是:在用户不但愿进行转换的时候,转换函数也有可能进行转换。应谨慎的使用隐式转换函数,最好选择仅在显式的调用时才会被执行的函数。在C++98中,关键字explicit不能用于转换函数,但C++11消除了这种限制。

相关文章
相关标签/搜索