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编辑  收藏  举报

导航