0
点赞
收藏
分享

微信扫一扫

C++知识点:C和C++(自用)

夕阳孤草 2024-07-24 阅读 19
c++

C和C++



1.类和结构体的关系:

类是结构体的升级表现,结构体只能封装变量,类不仅可以封装变量,还可以封装函数。使得具有耦合关系的变量和函数统一管理。

2.面向对象和面向过程

面向对象是在面向过程的基础上,进一步的封装。
(图片引用自C语言中文网)
在这里插入图片描述

不要把面向对象和面向过程对立起来。面向对象在执行效率上没有明显优势,但是有利于多人配合的大型代码管理。

3.头文件和标准命名空间

带c的头文件,例如cstdio、cstdlib。都是原C语言头文件。引用方式:#include < cstdio>

后缀带.h的头文件,例如stdio.h、stdlib.h,iostream.h、fstream.h 都是老式C++语言的头文件,没有使用任何命名空间,所有符号都位于全局作用域。引用方式:#include <stdio.h>

后缀不带.h的头文件,例如stdio、stdlib、iostream、fstream,都是新式统一修改过的C++语言的头文件,头文件的内容在命名空间 std 中。引用方式:#include < iostream>

4.cin和cout

cout 和 cin 分别是ostream和istream的C++内置对象,而不是关键字,在标准库中提前实例化。这种提前创建的对象被称为内置对象。

5. const在C++中和C中的区别

在这里插入图片描述
在这里插入图片描述
从上述两幅图中可以看出,在C++语言中const修饰的常量类似于#define的操作,直接替换,无需读取内存数据。它和#define的区别在于,#define是在预处理阶段就替换,const是在编译阶段就替换。

而C语言中const修饰的常量是由对应数据存储的,每次使用常量,会先读取对应内存地址中的数据,然后使用。

6.const全局作用域

普通全局变量的作用域是当前文件,但是在其他文件中也是可见的,使用extern声明后就可以使用
(图片引用自C语言中文网)
在这里插入图片描述
但是注意:C++对于const的特性做了修改,对于const修饰的常量,对于当前文件时可见的,但是对于其他文件不可见,这和添加了static关键字的效果类似。

由于该特性,建议讲const修饰的常量放在头文件中,这样就可以多文件多次使用。

7 new和delete

在C语言中,会用malloc()来申请动态内存,用free()来释放内存

int *p = (int*)malloc(sizeof(int) * 10);
free(p);

在C++语言中,会用new[]来申请动态内存,用delete[]来释放内存。

int *p = new int;
delete p;

int *p = new int[10];
delete[] p;

8 内联函数

作用:内联函数主要有两个作用,一是消除函数调用时的开销,二是取代带参数的宏

要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字是无效的。

9 函数重载

作用:重载是在一个作用范围内,例如一个类或者命名空间中,存在多个命名相同但参数列表不同的函数,从而可以让相同名称的函数实现不同的功能(但是功能务必相似)。

规则:

  1. 函数名称必须相同。
  2. 函数的参数列表必须不同。(类型不同,个数不同,顺序不同等,但是仅仅参数名称不同是不可以的)
  3. 返回值可以是相同也可以是不同。
  4. 仅仅函数返回值不同不能作为重载依据。

10. 函数重载的匹配

函数重载本质上还是不同的函数,每次调用函数时,编译器就会通过参数列表匹配到对应的函数,其优先级详见下述图片,具体优先级分别为:精准匹配>类型提升>类型转化。如果匹配成功则终止,不再往下匹配。
(图片引用自C语言中文网)
在这里插入图片描述

举报

相关推荐

0 条评论