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;
}
相关推荐
ZouZou老师17 分钟前
C++设计模式之工厂方法模式:以家具生产为例
c++·设计模式·工厂方法模式
无奈笑天下24 分钟前
银河麒麟桌面OS使用分区编辑器将/backup分区删除并扩容至根分区参考教程
linux·数据库·经验分享·编辑器
fish_xk3 小时前
c++中的引用和数组
开发语言·c++
有点。6 小时前
C++ ⼀级 2024 年 03 ⽉
c++
CheungChunChiu7 小时前
Linux 内核设备模型与驱动框架解析 ——以 rk-pcie 为例
linux·运维·ubuntu
CC.GG7 小时前
【C++】二叉搜索树
java·c++·redis
列逍7 小时前
Linux进程(三)
linux·运维·服务器·环境变量·命令行参数
Savior`L8 小时前
二分算法及常见用法
数据结构·c++·算法
深海潜水员8 小时前
OpenGL 学习笔记 第一章:绘制一个窗口
c++·笔记·学习·图形渲染·opengl
水天需0108 小时前
VS Code Ctrl+Shift+V 预览 Markdown 无效的解决方案
linux