首页 > 代码库 > 总结一些笔记上的C和C++知识点

总结一些笔记上的C和C++知识点

1、如果没有提供自己的copy构造函数,C++会提供一个默认的copy构造函数,是成员到成员的copy。

2、C中static的作用:

  1、隐藏:如果未加static,编译多个文件的时候,所有的全局变量和函数都具有全局可见性,故使用static可以在 不同文件 中使用 同名的函数和同名的变量。

  2、保持:只初始化一次,存在静态存储区(全局变量和static变量存在这),内容可以持久保存。

  3、默认初始化为0,在静态存储区中内存中所有字节默认值是0x00。

  注:存储在静态存储区的变量只初始化一次。

3、深浅copy:

  浅copy:创建对象用现有的对象来初始化,简单赋值,不分配资源(指针变量成员分配动态内存)。

  深copy:分配资源,需要自己定义的copy构造函数,不但copy成员,也copy分配的资源。

4、C++ const 关键字 

  表示不可改变,不仅仅表示一个常量,还可以修饰 数据成员、参数、返回值、成员函数、等,用于强制保护,不可被修改,增强健壮性。

5、定义常量 :

  C 使用宏#define定义

  C++ 使用const定义

  区别:const是有数据类型的常量,而宏常量没有, 编译器对于数据类型可以进行静态安全检查,但是对于宏常量不会进行安全检查,仅仅是字符替换。

6、栈和堆

  栈,在执行函数时,函数的内部变量的存储单元在栈上创建,函数结束,这些存储单元自动释放,栈内存分配运算内置于处理器中,效率高,但是容量小。

  堆,又称动态内存分配,程序在运行时用malloc或new申请的内存,大小可以由申请决定,由程序员使用delete或者free来释放,动态内存生存期自己决定,使用灵活。

7、new\delete 和malloc()\free() 

  malloc()和free()是C语言的标准库函数,new|delete是C++的运算符,都可以用来申请和释放内存,但是malloc()和free()函数不在编译器的控制权限之内,不能把构造函数和析构函数的任务强加给它们。

8、#include<a.h> 编译器从 标准库 中开始搜索;

    #include"a.h"   编译器从 用户的工作路径 开始搜索。

9、C++程序调用被C编译器编译之后的函数需要加 extern"C" 

  因为C++支持函数重载,C不支持函数重载

  函数被C++编译之后在库中的名字与C编译之后的不同。

  例如:void foo (int x ,int y); C编译之后叫_foo,C++编译之后叫_foo_int_int的名字,

  C++提供了C连接的交换的指定符号 extern“C” 来解决名字匹配问题。

10、C++多态实现:

  派生类和虚函数实现,基类和派生类使用同样函数名,完成不同的操作具体实现相隔离的另一类接口;

  多态提高了代码的组织性和可读性

  虚函数则根据类型的不同来实现不同的隔离。

11、动态特性:

  编译时确定程序的功能,叫静态特性。

  程序的功能在运行时刻才确定,动态特性。

  C++ 中使用 :虚函数、动态绑定、多态、构成了出色的动态特性。

12、封装 C++

  封装即信息隐藏,通过特性和行为的组合来创建新数据类型,让接口和具体实现相隔离,

  C++通过类来实现,让模块仅仅公开必须让外界知道的接口,来避免模块之间的行为干扰。

13、RTTI (Run-Time Type Identification)

  只有一个指向基类的指针或引用是确定一个对象的准确类型。

 

总结一些笔记上的C和C++知识点