c++ 学习点

1、C++基础与编程规范

      规范:

       1.2  在每个类声明之后、每个函数定义结束之后都要加空行

   void Function1()

   {

      

   }



   void Function2()

   {



   }

  1.3 

   一行代码只做一件事情,如只定义一个变量,或只写一条语句

   if、for、while、do 等语句自占一行,执行语句不得紧跟其后

   在定义变量的同时初始化该变量

   赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符

   程序的分界符‘{’和‘}’应独占一行并且位于同一列

       void Func1(int x, int y, int z); // 良好的风格

  {

   

  }

   void Func1 (int x,int y,int z); // 不良的风格{

   }



    应当将修饰符 * 和 & 紧靠变量名

    int *x, y;

    // 此处 y 不会被误解为指针

   块的注释常采用“/*...*/”

       行注释 一般采用“//...”

    类名和函数名用大写字母开头的单词组合而成。

变量的名字应当使用“名词”或者“形容词+名词”
变量和参数用小写字母开头的单词组合而成
常量全用大写的字母,用下划线分割单词
静态变量加前缀 s_(表示 static)
        float oldValue;
        float newValue;
       1.1、头文件的结构

    1.1.1 为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处 理块。

     1.1.2  #include <filename.h> 格式来引用标准库的头文件

     1.1.3  用 #include “filename.h” 格式来引用非标准库的头文件

    1.2 if(flag) //表示flag为真   if (!flag) // 表示 flag 为假

               if (flag == TRUE) if (flag == 1 ) //不良的

    1.3 浮点变量与零值比较

         不可将浮点变量用“==”或“!=”与任何数字比较。

         if ((x>=-EPSINON) && (x<=EPSINON))

      其中 EPSINON 是允许的误差(即精度)。0.00000001

    1.4 指针变量与零值比较

    if (p == NULL)  if (p != NULL)

    1.5 const 与 #define 的比较

     const 的作用:只读  三种方式

    const常量有数据类型,而宏常量没有数据类型



  1.5 函数三种传递参数的方式

     指针  引用  值传递

 

2  内存管理

   内存分配的三种方式

   静态存储区域分配 : 全局变量,static 变量

   在栈上创建: 函数内局部变量的存储单元都可以在栈上创建,函
                 数执行结束时这些存储单元自动被释放

   堆上分配,亦称动态内存分配  malloc/free  new/delete  自已释放

   内存常见错误

   内存分配未成功,却使用了它,应该用 if(p != null)

  内存分配虽然成功,但是尚未初始化就引用它

  内存分配成功并且已经初始化,但操作越过了内存的边界 //类似数组

    忘记了释放内存,造成内存泄露  //malloc/free  new/delete  必须成对出现

    释放了内存却继续使用它 //1 return 语句  2  没有将指针设置为 NULL

   void getMemory(char *p)

{

    p = (char *) malloc(100);

}

void test()

{

   char *str = NULL;

   getMemory(str);

  strcpy(str, "hello");

}

char *getMemory()

{

   char *p = (char *) malloc(100);

   return p;

}

野指针

“野指针”不是 NULL 指针,是指向“垃圾”内存的指针

  1.指针变量没有被初始化

  2.指针 p 被 free 或者 delete 之后,没有置为 NULL,让人误以为 p 是个合法的指针

3  c++支持函数重载  重写



4.

A(void);  // 缺省的无参数构造函数
A(const A &a);  // 缺省的拷贝构造函数
~A(void);   // 缺省的析构函数
A & operate =(const A &a);// 缺省的赋值函数

构造函数与析构函数的调用顺序

拷贝构造函数与赋值函数  如果用默认的, 当类中有指针变量的时候,会出现问题

可以把这两个函数设置成private



类的继承与组合

继承 是is a 的关系

组合 是has a 的关系



建议

使用 const 提高函数的健壮性

用 const 修饰函数的参数

用 const 修饰函数的返回值















  



















  







  

猜你喜欢

转载自eyeshot.iteye.com/blog/1880647