Bootstrap

C++教程(面向对象程序设计的复习要点)

本帖为浙大翁恺教授c++课程的部分听课摘要。
  • 第一个C++程序

    c 语言 #include 〈 .h〉 而 c++无.h,文件名是不一定要有后缀的。
    • std :standard标准空间,c++标准类库里面的类属于某个命名空间,所以把using namespace std;写在程序前面,省去了后文需要写全类的全称(如std::string)。
    • build:编译。
  • 面向对象基本原理

    • 从对象出发考虑问题,程序中设置的变量就是对象。
    • 对象=属性➕服务(或数据➕操作)。
    • 类是概念,对象是实体,类定义对象(属性),对象是一个类的东西。
    • OOP特点:分装➕继承➕多态性。
  • 自动售票机例子

    • 每一个定义的类都要有两个文件。
      • .cpp
        • 函数的定义(代码的body)。
      • .h(头文件)
        • 类的声明declaration、所有函数的原型prototypes。.h放声明不放定义,是为了避免多个.cpp去include .h的时候,link遇到了重复定义的东西。
        • 标准头文件结构:.h文件加这些是为了避免一个.cpp文件同时include 一个.h多次,而出现该.h类的声明重复出现。

                       ::域的解析符。

  • 头文件

    • .h和.cpp文件成对出现,定义类的.cpp文件和任何使用这个类的函数都要include .h文件(#include编译预处理命令,并不是狭义编译器要做的事情,是广义的编译要做的〈编译预处理.ii、编译.s [编译的时候只针对一个.cpp文件 故无法知道是否多个文件内部有冲突]、汇编.o、链接.out〉,include把所有.h里的文件的文本放入.cpp文件,形成大文本提供给编译器编译)。
    • 哪些是声明?
      • extern变量
      • 函数原型
      • 类/结构声明
    • #include
      • "xx.h"在当前目录下寻找。
      • 〈xx.h〉或〈xx〉在系统目录下找。
  • 不同的变量

    • 成员变量(field,字段),值和函数无关,在整个类的函数里都可以直接使用。生存周期是对象存在的时间。成员变量在类的每一个对象里。
    • 本地变量(局部变量),值和函数有关,只能在函数内部定义,在函数内使用。参数=本地变量,但是存储位置不一样。
  • 所有的成员函数都有隐藏变量:this(c++的关键字)

  • 构造函数与析构函数

    • 构造函数
      • 名字和类的名字相同
      • 无任何返回类型
      • 在对象被创建时自动被调用
      • 可以有参数
      • 没有参数的构造函数叫default  constructor
    • 析构函数
      • 命名~class(tilde)
      • 作用:在对象生命周期结束后,释放内存空间
      • 不能有参数
  • 对象初始化

    • 编译器在进大括号(scope)时就分配了所有存储空间,但构造函数在对象定义时才调用。
  • 访问限制(只在编译时刻)

    • privite私有的
      • 只有这个类的成员函数可以访问。
      • 是对类来说的,同一个类的对象之间可以互相访问私有变量
    • public公开的
    • protected受保护的
      • 只有这个类自己和他的子子孙孙(继承)可以访问,外界无法访问。
    • friend
      • 一旦声明别人是你的朋友,他就可以访问你的privite。
      • 可以是某个类/函数/某个类的某个函数。
      • (运算符的重载常用到friend)
    • class和struct在c++都是用来表达类的,有细微的差别:class默认访问属性privite,默认访问属性public。
  • 初始化列表

    • 是在构造函数给成员变量赋值
    • 早于构造函数实行
    • 在构造函数的{}外面加:p(),如A( ):ax(100),ay(50) { ...}
    • 建议使用初始化列表在构造函数初始化所有成员变量
  • 对象组合(一种软件重用的方式)

    • 用已有的对象组合成一个新的对象
    • inclusion的方式
      • fully:成员变量是对象本身,应该在初始化列表里调用该对象构造函数。
      • by reference :成员变量是对象的指针。
  • 继承(软件重用的方式) 

    • 在已有的类上做改造,构造一个新的类,可避免代码复制。
    • class relationship
      • Bass Class(基类)与Derived Class(派生类)
      • Super与Sub
      • parent与child
    • 子类(superset),子类比父类有更多的功能/数据。
    • 继承有关的访问界限。
    • 建议在初始化列表中初始化所有父类的成员变量
      • 父类先被构造,子类先被析构
      • 名字隐藏:如果父类中有overloading的函数,在子类中也出现了重复的函数(名字、参数一样),那
;