首页 > 代码库 > C++笔记

C++笔记

数据类型

  bool 布尔型

  char 字符型 8位

  wchar_t 宽字符型 16位

  short 短整型 16位

  int 整形 16位

  long 长整形 32位

  float 单精度浮点型 6为有效数字

  double 双精度浮点型 10位有效数字

  long double 扩展精度浮点型 10位有效数字

修饰符:数据类型前面可以加上一个和多个修饰符 ,例如long long ,前一个是修饰符,后一个是类型

 

  • signed
  • unsigned
  • short
  • long

typedef 用来为已有数据类型起别名

sizeof()函数可以获取类型的大小

struct

enum

C++数组定义与赋值:int ar[]       char ch[]

C++字符串:C++可以使用char数组代替字符串,也可以引入 <string>头文件,使用String构造函数;

      {‘abc‘,‘def‘,‘jnm‘}可以看成字符串数组,数组元素为char数组   

常量:使用const关键字,或#define 定义

------------------------------------------------------------------------

存储类:修饰符

  • auto
  • register
  • static
  • extern
  • mutable
  • thread_local (C++11)

-------------------------------------------------------------------------

指针和引用的区别

int i=1;  int& r=i;      r是i的引用

int *p=&i;

指针定义时*不必与int 或 p 相邻,int* p      int *p       int * p都能正常编译

根据不同情况选择不同格式可以使代码方便阅读

----------------------------------------------------------------------------

面向对象

c++中类可以看成一种数据机构,可以与函数、结构体处于同一级别,与Java中一个类就是一个java文件不同

C++中类的结构:

  class Demo

  {

    public:

      int a;

      int func()

      {

        return 0; 

      }

    private:

      int b;

  }

类成员修饰符:public protect private(默认)

类成员函数:可以在类中声明并定义(函数体),或者只在类中声明,使用 :: 运算符在类外面定义;

构造函数和析构函数:析构函数用来删除对象

拷贝构造函数、内联函数、友元函数

---------------------------------------------------------------------------------------

C++中类的继承,一个类可以有多个直接父类,多继承(如果多个直接父类中有同名变量或函数,怎么处理)

继承的写法:class 派生类 : 访问修饰符  基类{}

思考:同一个类、派生类、外部类分别有3、2、1个访问权限,public protect private(默认);

   派生类继承哪些函数、哪些不继承(基类的构造函数、析构函数和拷贝构造函数、基类的重载运算符、基类的友元函数)

---------------------------------------------------------------------------------------------

C++多态与Java多态

虚函数,使用virtual关键字定义,告诉编译器不要静态链接,在派生类中重新定义虚函数(相当于Java方法重写),根据派生类的类型调用不用的重写方法

纯虚函数,没有方法体,方法体用 =0;代替,表示这是一个纯虚函数,相当于Java中的抽象方法

接口(抽象类):至少有一个纯虚函数,这点与Java中的接口和抽象类不同。

---------------------------------------------------------------------------------------------------

Java泛型和C++模板的区别,Java的泛型是语法糖,与模板有很多区别

-----------------------------------------------------------------------------------------

命名空间:在同一个命名空间下不能有同名的变量和函数,命名空间表示一个范围

命名空间的定义和使用

使用namespace关键字定义

   namespace  空间名 {  代码。。。。 }

using namespace ...

使用作用域运算符 :: 调用特定命名空间中的函数

------------------------------------------------------------------------------------------

C++ STL:类似于Java的集合框架,封装了一些数据结构的操作

--------------------------------------------------------------------------------------

动态内存分配

C语言中使用malloc()和free()函数族

C++中使用new和delete运算符

malloc()函数原型及使用

(void *)malloc(int size)

malloc函数返回值是void类型的指针,接收的参数是int类型

调用malloc函数需要将void类型指针强制转换成具体的数据类型指针,然后赋值给指针变量

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

free()函数释放内存,参数是内存首地址

free(p);

使用free()函数释放内存后,p指针的值并没有变,为了防止再次使用p指针造成错误,应该p=NULL;

----------------------------------------------------------------------

new 运算符的使用,new可以用来申请内存分配,也可以来创建类对象

使用new创建的对象需要用指针变量接收,此对象在堆内存中,使用delete 对象名删除对象

不使用new创建的对象存放在栈内存中

malloc和new的区别:因为malloc是函数,编译器无法控制,但是创建对象又需要自动执行构造函数,删除时要执行析构函数,所以C++使用new运算符分配内存

------------------------------------------------------------------------------

函数执行时栈与寄存器的变化

ebp寄存器保存栈底地址

esp寄存器保存栈顶地址

当一个函数中调用另一个函数时

首先将当前函数的栈底地址,也就是ebp寄存器中的值压栈,esp地址增加1,

将esp中的值存放到ebp中

esp增加1

这样ebp寄存器中的地址值指向的内存中存放的值是当前函数的调用函数的栈底

http://www.cnblogs.com/syw-casualet/p/5223595.html

 

C++笔记