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;
}
相关推荐
煤泥做不到的!26 分钟前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H28 分钟前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
aherhuo31 分钟前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
axxy20001 小时前
leetcode之hot100---24两两交换链表中的节点(C++)
c++·leetcode·链表
檀越剑指大厂1 小时前
【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
linux·运维·服务器
若亦_Royi2 小时前
C++ 的大括号的用法合集
开发语言·c++
2301_819287123 小时前
ce第六次作业
linux·运维·服务器·网络
武汉联从信息3 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
Aileen_0v04 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
州周4 小时前
Ftp目录整个下载
linux·服务器·数据库