C/C++重点知识点
Posted 中国思想史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++重点知识点相关的知识,希望对你有一定的参考价值。
PART 1
在16/32/64位机器上 char占用1个字节、short、short int占用2个字节、float占用4个字节、double、long long占用8个字节
int、unsigned int在16位机器上占用2个字节,在32/64位机器上占用4个字节
指针在16位平台占用2个字节,在在32位机器上占用4个字节,在64位机器上占用8个字节
long、unsigned long在16/32位机器上占用4个字节,在64位机器上占用8个字节。
综上所述,如果不考虑很少使用的16位机器的情况。char(1)、short/short int(2)、float/int/unsigned int(4)、double/long long(8)在32位和64位机器上占用的空间是一样的。只有long/unsigned long/指针(4、8)有差别。
具体如图所示:
| 32bit 平台 | 64bit 平台 |
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 4 | 8 |
long long | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
pointer | 4 | 8 |
PART 2
C++ 是区分大小写的编程语言。
C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。引用很容易与指针混淆,它们之间有三个主要的不同:
1、不存在空引用。引用必须连接到一块合法的内存。
2、一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3、引用必须在创建时被初始化。指针可以在任何时间被初始化。
实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数。这个方式确实好,有点里应外合的感觉。
C++中,单冒号用于继承和初始化的赋值,双冒号用于类之外函数的定义以及直接使用类调用静态类成员函数。
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。
malloc() 函数在 C 语言中就出现了,在 C++ 中建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。
重载发生在一个类中,指函数的方法名相同,参数类型或个数不同,编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。多态是指子类重新定义父类的虚方法(virtual,abstract)。当子类重新定义了父类的虚方法后,父类根据它的不同子类,动态调用属于子类的该方法,这样的方法调用在编译期间是无法确定的。重写发生在继承类中,指函数的方法名、参数类型、返回值类型全都相同。1.被重写的函数不能是static的。必须是virtual的。2.重写函数必须有相同的类型,名称和参数列表 3.重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public或protected也是可以的。重定义 (redefining)也叫做隐藏:,子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 )。如果一个类,存在和父类相同的函数,那么,这个类将会覆盖其父类的方法,除非你在调用的时候,强制转换为父类类型。
只有子类转换成父类,父类不可能转换成子类。因为子类是从父类继承而来,子类中包含父类中所有成员。在子类转换成父类的时候,也需要注意,只能是指针或者引用,不能是对象,除非有重写构造函数和赋值函数。在转换成父类的过程中,意味着对子类进行了一个切割,只是将子类中的父类部分赋值给了父类对象。
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
以上是关于C/C++重点知识点的主要内容,如果未能解决你的问题,请参考以下文章