2017-5-27 C++primer笔记

来源:互联网 发布:淘宝退货运费谁出 编辑:程序博客网 时间:2024/06/04 00:27

第七章 类

回家第一晚


  • 定义在类内部的函数是默认内联的。

  • 定义在类内部的构造函数(用冒号形式写的) 最后要加一个空的大括号~

  • 含有指针数据成员的类一般不宜使用默认的拷贝和复制操作。 如果类的数据成员都是内置类型的(意思是定义在类的内部?),则不受干扰。

  • 要把类的成员函数定义成内联函数 有二种途径

    • 把函数定义放在类的内部(默认内联)
    • 把函数定义放在类的外部,并在定义之前显示的指定inline

内联函数

  • 当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。

    • 省去了调用过程,加快程序运行速度。
      • 函数在调用时,有参数入栈保护现场等操作,占用很多时间。
  • 内联函数的局限性和使用时要注意的点

    • 当函数存在递归调用时,无法设置为内联
    • 当该函数中使用循环语句和switch语句时(其实也是多次调用),无法内联
    • inline函数内代码应当很短小,否则会增加体积。
    • inline是一种“请求”, 有时编译器不会理会这个请求,会给出warning。
    • 内联函数在声明时一定要写上inline。
    • 内联函数在调试时不会生效。!

    - 在一个文件定义的inline函数在另一个文件中不能使用。 所以inline 一般声明在头文件中共享

—————-

别名

    using pos = std::string::size_type;
  • pos就是后面那一串的别名。
  • 也可以用typedef来代替using
typedef std::string::size_type pos;

  • 在类外定义构造函数
    • 构造函数没有返回类型
    • 必须指明是哪个类的成员
      cpp
      Sales_data::Sales_data

      • 含义是定义Sales_data类的成员。名字是Sales _data
        • 因为它的名字和类的名字相同,所以它是一个构造函数。
    • 对比: 在类外定义类内函数和构造函数
    Screen::Screen (unsigned a){        num = a;    } ////定义构造函数(没有返回类型)    inline Screen &Screen::set(int a){        num = a;    } ////定义类内的函数 有返回类型,而且是内联的

return this 和 return *this

  • return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&【引用】, 则是本身 )
  • return this返回当前对象的地址(指向当前对象的指针)

函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本


原创粉丝点击