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;
}
相关推荐
顾安r1 小时前
11.8 脚本网页 推箱子
linux·前端·javascript·flask
___波子 Pro Max.1 小时前
Linux source命令详解与应用场景
linux
橘子132 小时前
Linux网络基础(一)
linux·网络·arm开发
2301_795167204 小时前
玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为
c语言·c++·rust
你想考研啊4 小时前
linux安装jdk和tomcat和并自启动
java·linux·tomcat
习惯就好zz6 小时前
WSL2 安装Ubuntu卡在安装进度0%无响应问题解决
linux·windows·ubuntu·wsl·wsl2
躲猫猫的喵喵7 小时前
Ubuntu2204降内核版本
linux·运维·服务器·ubuntu
昌sit!7 小时前
Linux系统性基础学习笔记
linux·笔记·学习
zdslovezy8 小时前
CentOS 系统升级 OpenSSH 和 OpenSSL 的完整方案
linux·运维·centos
HIT_Weston8 小时前
18、【Ubuntu】【远程开发】技术方案分析:私网ip掩码
linux·tcp/ip·ubuntu