1.面向对象的重要特征: 封装性、继承性和多态性
2.C++中的重点和难点:
      2.1 构造函数和析构函数
       构造函数负责完成类环境和类属性的初始化工作
       析构函数,释放堆上分配的内存和其他资源
      注意点: 两者都是由程序隐式调用,用户不能调用。
                  两者都没有返回值,且不能被继承
                  析构函数可以是虚的,但构造函数不能
                  在构造函数中最好不要做赋初值以外的事
                  析构函数在对象释放(delete)时被调用,它不含参数。
      引申:
      运算符new分配堆内存,如果成功,则返回指向该内存空间,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值,以防分配失败。
      堆空间大小是有限的,使操作系统和编译的设置不同而不同,当程序不在使用所分配的堆空间时,应及时用delete释放它们。程序中new和delete的数目要相等。
      delete的操作数是new返回的指针,当返回的是new返回的数组时,应该带[]。
      堆内存允许在运行时(而不是编译时)申请某个大小的内存空间。

      2.2 指针
      建立指针:定义指针和赋值
                     用&操作符可以获取变量的地址,指针变量用于存放地址。
                     int* iptr;
                     int iCount = 18;
                     iPtr = &iCount;
                     如果iCount地址是0000:F822,则iPtr的值是0000:F822。
       间接引用指针: 可获得由该指针指向的变量内容,如上面的*iPtr结果为18。间接引用指针既可用于右值也可用于左值,如*iPtr = 58;就是改变了iCount的值为58
      指针也是变量,是变量就具有内存地址,所以指针也有地址:&iPtr。
      指针在使用中必须类型匹配,*iPtr=&iCount; //error,指针值不是整型数
      int *iPtr= &iCount;是正确的
      指针运算,只有加法和减法适用于指针运算
            int iArray[10];
            int *iPtr = iArray;等价于int *iPtr = &iArray[0];都是指向数组第一个元素的地址。
            指针运算都是以数据类型为单位展开,即iPtr是一个整型指针,iPtr++是指正指向下一个整型数,而iPtr的地址值实际增加了2。
        指针与数组。 数组名本身是一个指针,使指针常量,区别于指针变量,不能赋值给它,不能做左值。
            int a[100];int *iPtr = a;
            第i个元素
            a[i]等价于*(a+i)等价于iPtr[i]等价于*(iPtr+i)
            第i个元素的地址
            &a[i]等价于a+i等价于iPtr+i等价于&iPtr[i]
      const指针
      1.指向常量的指针(常量指针)
           在指针定义语句的>>>类型<<<前加const,表示指向的对象是常量。*iPtr不能变
      2.指针常量
           在指针定义语句的>>>指针名<<<前加const,表示指针本身是常量,在定义指针常量时必须初始化。iPtr不能变。
      3.指向常量的指针常量(常量指针常量)
           定义是须初始化,const int * const cpc = &b;表示cpc和*cpc都是常量不能做为左值。
      指针和函数
          传递指针的函数调用过程为:
          1.函数声明中指明指针参数如:void swap(int *x, int *y);
          2.函数调用中传递以变量的地址,如swap(&a,&b);
          3.函数定义中对形参进行间接访问。
          返回指针的函数叫指针函数,指针函数把其中的局部变量地址返回是不妥的,可以返回堆地址,全局或静态变量的地址。
      指向函数的指针
          一个函数在编译时被分配一个入口地址,这个入口地址成为函数指针,可以用一个指针变量来指向该函数指针,然后通过该变量来调用函数。
          函数指针的格式: 函数返回值数据类型标识符(*指针变量名)();
          函数指针的加减是没有意义的。
       void类型指针
          它能够被显式转换成其他任何类型的指针,其他任何类型的指针可以赋给void指针。空指针不能进行指针运算,也不能进行间接引用。
     
      this指针
          this指针涉及到编译问题。
      字符串常量 ,由" "标示,但不是用来初始化数组的字符串,是字符串常量,其类型是指向字符的指针(char *)。