C++知识点总结
一、类
1.类的两种定义形式:
(1)在类中定义成员函数。
(2)在类之后定义成员函数
2.class和struct的区别:
(1)C和C++中struct的区别:
C的struct不能为空,而C++的struct可以为空,大小为1;
C的struct中成员没有访问控制权限,而C++的struct有,且默认public;
C的struct是在定义时就给数据成员开辟了存储空间,而C++的struct是在定义类对象的时候才开辟的空间;
(2)C++中class和struct的区别:
Class中成员默认的访问控制权限是private,而struct则默认的是public。
3.类:
类是一种抽象的数据结构,用来描述对象的属性,是将不同数据类型的数据以及与这些数据相关的操作封装在一起的集合体。
4.面向过程与面向对象程序设计的不同:
(1)过程是基于算法的,而对象是基于类的;
(2)过程是以函数的设计来实现的,而对象是以类的设计来实现的。
5.面向对象的四大特点:
抽象,封装,继承,多态。
6.内联函数:
(1)将类中没有switch语句的成员函数成为内联函数,用inline标示。内联函数在运行时在源程序中原地扩展。(在类中定义的成员函数一般被默认为内联函数)
(2)内联与预处理的区别:
宏是预处理命令,inline是函数;
宏是在预编译时进行替换,而inline在执行到这一句时才替换;
宏在替换时不做类型检测,而inline要做;
宏占编译时间,而inline占运行时间。
7.访问控制权限:
(1)public公有型:外部可以访问。
(2)protected保护型:除了本类、子类和友元可访问外其余都不能访问。
(3)private私有型:除了本类外,外部的都不能访问。
8.成员访问控制权限的设计:
(1)成员函数:
如果为了外部调用,就声明为public;
如果为了一些内部辅助功能,就声明为private;
如果类会被继承,就声明为protected。
(2)数据成员:
原则上不能有public;
如果类不会被继承,就声明为private;
如果类会被继承,就声明为protected。
9.this指针:指向当前对象,其作用为:
(1)对于非静态成员函数,隐含的this指针作为当前对象的地址成为第一个传递参数。
(2)可用于访问被同名局部变量屏蔽的类的数据成员。
(3)从成员函数返回当前对象的引用。
二、构造函数
1.构造函数:
(1)构造函数的作用:专门用于创建对象为其开辟存储空间并初始化其数据成员。
(2)构造函数可以重载,但不能有返回值,不能随意被调用,可通过“类名::”强制调用。
(3)默认构造函数只负责分配空间,不做初始化工作。
(4)有且仅有一个默认构造函数。
2.析构函数:
(1)析构函数名与类名相同,但在其前边加上字符“~”。
(2)析构函数不带任何参数,可以默认,无类型说明。
(3)一个类有且仅有一个析构函数
三、堆与复制构造函数
1.C++的内存布局:
(1)代码区:存放程序代码
(2)全局数据区:存放全局数据和静态数据。
(3)栈区:存放局部变量。
(4)堆区:存放与指针相关的动态数据。
2.全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间作为堆区。
3.堆空间的存在意义:
(1)直到运行时才知道一个对象需要多少内存空间。
(2)不知道对象的生存期到底有多长。
(3)减少局部变量对空间的占有。
4.从堆上分配对象数组时,只能调用默认构造函数。
5.malloc/free与new/delete的区别:
指针函数的作用(1)new/delete是C++运算符,而malloc/free是标准库函数,用之前要包含头文件<malloc.h>。
(2)new在分配空间时会自动调用类的构造函数,malloc只管分配空间,不会调用构造函数。
(3)delete在释放空间时会调用类的析构函数,而free则不会调用。
(4)new/delete是可以重载的,而重载之后就成为了函数。
(5)malloc在申请内存的时候,必须要提供申请的长度,而且返回的指针是void*型,必须要强制转换成需要的类型。free的返回值为空。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论