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;
}