c++基础知识整理(1)

  1. 函数的默认值从右往前写(也就是说函数的默认值,右侧必须都得有)。
  2. 函数的默认值一般写在声明中,函数定义可不用写默认值(因为编译器的差别,有些在定义中默认值编译器不能识别,默认值写在声明中却能使所有编译器都识别)。
  3. 函数重载的定义:在相同作用域下,拥有相同的函数名但函数的参数个数或参数类型不同的函数共称为函数的重载。
  4. 编译器如何识别重载的函数:编译器在编译的时候,将重载函数的函数名修改为 函数名参数类型参数类型形式来区分重载函数。
  5. 内联函数:函数最前边有关键字inline,将该函数称之为内联函数。内联函数的作用是编译器在编译阶段将整个内联函数体与调用函数替换,提高代码运行效率。需注意:内联函数的替换是程序员建议编译器的,到底替不替换,编译器自己做决定,所以说inline关键字是建议性的关键字;内联函数不能替换递归,当然,就算你将递归函数标记为内联函数,编译器也不会替换的;内联函数体内的逻辑应当尽可能简单;内联函数省去了函数调用部分和返回部分,相比于函数调用,速度较快。
  6. 内存管理:通过调用new和delete运算符来实现向操作系统进行内存的申请和释放。操作技巧:用new运算符申请内存后,需要判断指向该内存的指针是否为NULL,若为NULL,就要进行异常处理。用delete释放内存后,需要将指向该内存测指针指向NULL。
  7. 小技巧:做if语句条件判断时,最好将常量放在 ==运算符之前,这样可防止将比较运算符写成赋值运算符。因为若写成赋值运算符,编译器是不能编译通过的。
  8. 类的实例化方法:一、在栈中实例化对象,形式为:类名 对象名;二、在堆中实例化对象,形式为:类名 * 指针名 = new 类名();在栈中实例化对象,编译器自动在栈上分配存储空间存储对象,自动回收存储空间。在堆中实例化对象,程序员为对象在堆中分配内存存储对象,销毁对象时,程序员手动释放堆中的存储空间。
  9. 成员函数的调用方法:若是在栈中实例化的对象,调用形式为:对象.成员函数名()和对象.数据成员;若在堆中实例化的对象,调用形式为 指针名 -> 成员函数()和 指针名 -> 数据成员();
  10. 错误的string连接:”常量字符串” + “常量字符串” 错误,即常量字符串连接常量字符串是不被允许的。
  11. 面向对象的基本思想:以对象为操作核心,来实现逻辑。
    12.成员函数的定义:分为一、类内定义,即将函数体放在类内定义;二、类内声明,类外定义,即只在类内进行声明,将函数体放在类外定义。对于类内定义,编译器会自动在函数头加上inline关键字,使其变为内敛函数。若将函数的声明和实现放在一个文件中,即称作同文件类外定义,若将类的声明放在.h中,将类外定义放在.cpp中,即称作分为件类外定义。一般编写C++程序时,我们需使用分为件类外定义,这样显得更专业。需要注意的是在.cpp文件中我们需要加上头文件#include “文件名.h”来将声明包含在.cpp文件中,在使用时,也需要加上#include”文件名.h”。
  12. 类的不同对象共享同一代码段,不同对象拥有不同的堆,栈。
  13. 构造函数:构造函数名与类同名,没有返回值。对象在初始化时,自动调用构造函数。若用户没有定义构造函数,编译器会自动生成。构造函数分为普通构造函数和拷贝构造函数。普通构造函数可以重载,没有参数的普通构造函数又称作默认构造函数。
  14. 初始化列表:用来初始化类的数据成员。形式为:类名(参数):数据成员(参数),数据成员(参数){}, 其特点为:
    一、初始化列表先于构造函数体执行
    二、初始化列表可以初始化const类型,引用类型。
    三、初始化列表只能用于构造函数。
    使用初始化列表来初始化数据成员,会看起来更专业。
  15. 拷贝构造函数:调用拷贝构造函数的三种情况。一、当在栈中实例化一个对象,而初始化对象的参数是另一个对象时(直接初始化),二、或在堆中实例化一个对象,而将另一个对象复制给该对象(拷贝初始化),就会调用拷贝构造函数而不是普通构造函数。若程序员不定义拷贝构造函数时,编译器会自动生成拷贝构造函数。拷贝构造函数的参数形式是有规定的,为 对象名(const 类名 &形参名)。三、若调用函数的形参是对象时,若调用该函数,此时也会调用拷贝构造函数。
  16. 析构函数:没有返回值,不能重载。若不定义,系统自动生成。作用是做资源回收工作。
  17. 命名空间的写法:
    namespace 名称
    {
    在该命名空间的代码
    }
    在主函数前写using namespace 名称,是告诉编译器,使用的是该命名空间的函数。
  18. C++小技巧:输出x为八进制:cout << oct << x << endl;
    输出x为十进制:cout << dec << x << endl;
    输出x为十六进制:cout << oct << x << ends;
    将布尔值以名字形式输出: cout << boolalpha << x << endl;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章