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;
}
相关推荐
嘿BRE2 分钟前
【C++】几个基本容器的模拟实现(string,vector,list,stack,queue,priority_queue)
c++
友友马14 分钟前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
ö Constancy1 小时前
c++ 笔记
开发语言·c++
猿java1 小时前
Linux Shell和Shell脚本详解!
java·linux·shell
fengbizhe1 小时前
笔试-笔记2
c++·笔记
徐霞客3201 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt
fpcc1 小时前
redis6.0之后的多线程版本的问题
c++·redis
茶猫_1 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
螺旋天光极锐斩空闪壹式!2 小时前
自制游戏:监狱逃亡
c++·游戏
A.A呐2 小时前
【Linux第一章】Linux介绍与指令
linux