C/C++知识总结(2)
1.C++中的class和struct区别
- 两者都有成员函数以及公有私有部分;class成员默认private,struct成员默认public。
- class默认private继承,struct默认public继承。
2.C与C++中struct区别
- C语言中struct是用户自定义数据类型;C++中struct是抽象数据类型,支持成员函数的定义。
- C语言中struct只是一些变量的封装体,不能隐藏成员,且不能包含函数;C++中可以包含函数,也可以增加访问权限。
3.类的三种访问权限和三种继承方式
- 父类的所有成员子类都会继承,只不过是有些权限的成员可能无法访问,但无论哪种继承,父类的私有成员子类都是无法访问的。
- 公有继承:父类的公有和保护成员全部继承为公有成员,这些成员在子类里面和外面的对象都可以使用。
- 保护继承:父类的公有和保护成员全部继承为保护成员,这些成员在子类里面可以使用,在子类外面无法使用。
- 私有继承:父类的公有和保护成员全部继承为私有成员,这些成员在子类里面可以使用,在子类外面无法使用。
4.C++中static的作用
不考虑类:
- 隐藏作用:不是static的全局变量与函数具有全局可见性,可以被其他文件所使用,加了static后只能在该文件的模块内使用。
- 默认初始化为0:无论是全局static变量还是局部static变量,未初始化都会默认为0。
考虑类:
- static成员变量只与类关联,不与具体的对象关联。在类里面用static声明后,便有了一块独立的空间,不会随着对象的调用创建与摧毁而消失;在类外部进行初始化;可以被非static函数访问。
- static成员函数属于整个类,而不是每个对象,只能访问静态成员变量和静态成员函数,可以被非静态成员函数访问;不具有this指针。
5.C++中const的作用
不考虑类:
- const变量必须初始化,且之后无法修改。
- 以const为形参的函数,可以接受const,也可以接受非const的实参。
考虑类:
- const成员变量在类内声明,声明的时候不能初始化,必须通过构造函数初始化。
- const对象只能调用const成员函数,非const对象都可以调用。
6.野指针和悬空指针
- 野指针:指针定义后未初始化就直接拿来用了。
- 悬空指针:指针最初指向的空间已经被释放了(如果再使用,就会出现问题)
7.重载,重写和隐藏的区别
- 重载通常是针对同名函数,不过函数的参数不能完全一样(即参数数目和参数类型都相同),仅仅通过函数的返回值进行区分。
- 重写函数通常是指派生类对基类中的同名虚函数进行重写(就是覆盖),所以要保证重写函数的参数以及返回值要和基类的虚函数一模一样。
- 隐藏:派生类中的函数对基类中的同名函数(不是虚函数)进行了覆盖,不过要保证参数相同。
8.C++的几种构造函数
- 默认构造函数:没有参数,类自动初始化成员变量。
- 初始化构造函数:有参数,手动初始化成员变量。
- 复制构造函数:参数是const类型,用于复制本类的对象。
- 转换构造函数:只有一个参数,参数通常是其他类型的。
9.浅拷贝和深拷贝的区别
- 浅拷贝:不会开辟新的空间,拷贝的指针与原来指针指向同一个地址,如果原指针指向的地址资源释放了,那么再释放拷贝指针指向的地址资源就会出错。
- 深拷贝:开辟出新的空间,拷贝的指针与原指针指向同一个地址,即使原指针指向的空间被释放了也不影响拷贝指针的值。
10.内联函数与宏定义的区别
- 宏定义是预处理命令,在预处理阶段执行;内联函数是在编译阶段嵌入到目标代码中,减少了调用函数的开销。
- 宏命令不会进行语法检查和类型判断,内联函数在编译阶段会进行语法检查和类型判断。
- 对于C++而言,宏不能操作类的私有成员。
posted on 2024-03-23 16:46 xy-struggle 阅读(5) 评论(0) 编辑 收藏 举报