C++ 比 C语言的新增的特性 1

1. C++是C的增强

1.1 C++是静态类型的语言,具有严格的数据类型检查

1.1.1 c

因为const修饰的变量不允许修改,但是只给了警告,不严谨

cpp 复制代码
const int a=10;
	a=20;  //报错
	int *p=&a;
	*p=20;
	//a的值?
test1.c:6:9: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
    6 |  int *p=&a;
      |         ^

1.1.2 c++

c++直接报错

cpp 复制代码
const int a=10;
	a=20;  //报错
	int *p=&a;
	*p=20;
est2.cpp: In function 'int main()':
test2.cpp:6:9: error: invalid conversion from 'const int*' to 'int*' [-fpermissive]
    6 |  int *p=&a;
      |         ^~
      |         |
      |         const int*

2. C++结构大致解读

2.1 iostream库文件无后缀

C++如果包含的头文件不加.h表示是属于C++标准库里的文件

加.h,表示是用户自己写的头文件

iostream是用双引号扩起来,编译器首先是在当前工程文件下寻找该库文件,然后再从标准库中找该文件

iostream是用<>括号括起来,编译器首先是从标准库中找该文件,再从当前工程找该文件

3. 新增变量引用

3.1 引用符号:

&(在C语言表示取地址,在C++里是另外一层表示引用)

引用:是给已经存在的变量取一个别名,称为"引用",别名和原来的变量名是同一个

3.2 引用的声明:

数据类型(内置的数据类型或自定义的类类型) & 别名 = 已经存在的变量名 ;

3.3 例

share1中

test1.cpp
cpp 复制代码
#include <iostream>
using namespace std;

int main()
{

    int a = 10;
    int &b = a;
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;

    cout<<"a的地址="<<&a<<endl;
    cout<<"b的地址="<<&b<<endl;

    cout<<"hello world"<<endl;
    return 0;
}

3.4 常见的面试题:

3.4.1 引用和指针的区别?

(1)编译器会为指针变量申请另外的空间,但是编译器不会为引用类型的变量额外开辟空间

(2)指针变量存在时可以不用进行初始化,但引用变量一旦存在必须进行初始化工作

(3)指针变可以指向多个已经存在的变量,引用变是对应一个已经存在的变量(一对应)

3.5 通过函数交换两个变量的值

share1中

test3.cpp
cpp 复制代码
#include<iostream>
using namespace std;


void swap(int &a,int &b){
    int tmp = a;
    a = b;
    b = tmp;

}
int main()
{
    int a  =10;
    int b = 20;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}

4. 函数重载

新增了函数重载以及运算符重载

4.1 函数重载

概念:函数名相同,函数的参数个数、顺序、类型不同,就称为"函数重载"

注意点:

函数重载是与函数的返回值无关(即返回值不同不构成重载)

cpp 复制代码
例如:
C语言:
	void  function(int a   ,  char  b)
	{

	}
	void  function(int a)
	{

	}  //报错:标识符重名的错误
C++:
	void  function(int a   ,  char  b)
	{

	}
	void  function(int a)
	{

	}  //正确

4.2 练习

test4.cpp

cpp 复制代码
#include<iostream>
using namespace std;

//函数重载

void swap(int &a,int &b){
    int tmp = a;
    a = b;
    b = tmp;
}

//参数不同包括类型不同可以重载
void swap(){
    cout<<"hello"<<endl;

}

//返回值类型不同,不能重载
// int swap(int &a,int &b){
//     cout<<"hello"<<endl;

// }

int main()
{
    int a  =10;
    int b = 20;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    swap();
    return 0;
}
相关推荐
No0d1es4 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
炫友呀5 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
DjangoJason6 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
weixin_307779138 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
Peter_Deng.9 小时前
Linux 下基于 TCP 的 C 语言客户端/服务器通信详解(三个示例逐步进阶)
服务器·c语言·网络
花小璇学linux9 小时前
imx6ull-驱动开发篇24——Linux 中断API函数
linux·驱动开发·嵌入式软件
林开落L9 小时前
库制作与原理(下)
linux·开发语言·centos·库制作与原理
wxy3199 小时前
嵌入式LINUX——————TCP并发服务器
java·linux·网络
Castamere10 小时前
配置 Linux 终端 (zsh)
linux
蒋星熠10 小时前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构