美文网首页
GeeKBand&C++面向对象高级编程(上)第一周笔记

GeeKBand&C++面向对象高级编程(上)第一周笔记

作者: 爱佛 | 来源:发表于2017-01-09 23:25 被阅读0次

     学习目标:

    养成正规、大气的编程习惯,以良好的方式编写C++ class(class without pointer members、class with pointer members),掌握class之间的3种关系(继承、复合、委托)。

    C++ programs 代码基本形式

    c++ programs 代码基本形式

    延伸文件名(extension file name)不一定是.h 或.cpp,也可能是.hpp或其他或甚至无延伸名。

    头文件(Header)中防御式声明(guard)

    comple's guard

    防御式声明帮助我们不必关注包含头文件的次序,防止了重复声明、定义和编译。

    一般在头文件中包括前置声明(forward declarations),类-声明(class declarations)和类-定义(class definition)。

    Header(头文件)布局

    先写类声明中的head/body,再去补前置声明。

    类模板:template声明接下来定义的class为class template,可以在使用时再定义里边的变量类型

    在class head上面加上template<typename T>

    inline标识符:

    一个函数如果在class内部完成定义,那他就已经是inline函数,默认含有inline标识符函数若在class body内定义完成自动成为inline候选人。

    函数以inline书写只是建议编译器以inline方式编译,但编译器到底有没有编译inline函数,我们不知道。

    访问级别(access level)

    public(function 外部调用) 可任意被外部访问

    private(data) 只可被友元函数(由friend标识符提示)和同类对象访问

    protect可被友元函数(由friend标识符提示)和同类对象访问,且可被子类访问。

    不一定集中书写同一访问级别的信息,可以分开声明并书写,不声明且没有访问域信息时默认为private

    外部不能直接访问class的private数据,数据一定要通过函数访问和修改——封装

    构造函数ctor(constructor):负责对象的初始化,当一个对象被类创建时,自动被调用,不能直接调用构造函数。构造函数可以重载(overloading),多种初值设定。

    构造函数名称与类名称一致,可以有参数,参数可以有默认值(default argument),没有返回值类型(return type)。

    初值列(initialization list)(构造函数特有,功能可由写在函数体内的赋值语句代替,但是初值列更优) 格式”:数据名(参数名)“。

    const标识符

    在参数表后的const,表示当前函数不会改变对象内部成员变量的值。在参数前的const,表示当前参数对于成员函数是一个常量变量,且不会被改变。

    值传递(pass by value)和引用传递(pass by reference (to const))

    尽量不使用值传递的传递方案,因为整包传递,复制效率太低,当一些对象数据量比较大时,会给内存带来负担。在传参时,建议所有参数传递都传引用(效率),但注意这会修改原数据,若避免原数据被改变,在引用前添加const声明。

    返回值传递

    仍然推荐采用引用传递,但存储结果为栈空间的局部变量时,引用传递无意义,只能值传递。如返回的结果为const,只能采用值传递或const引用传递。使用引用传递时,传递者无需知道接收者是否以reference形式接受。

    特殊的函数重载——操作符重载(operator overloading)

    操作符重载可以视为函数的一种,注意操作符函数具有左右参数在函数中的映射关系。

    临时对象(temp object)

    在函数调用的时候,无论是参数为对象还是返回一个对象,都将产生一个临时对象。

    相关文章

      网友评论

          本文标题:GeeKBand&C++面向对象高级编程(上)第一周笔记

          本文链接:https://www.haomeiwen.com/subject/qetkbttx.html