1. C++是C的增强
1.1 C++是静态类型的语言,具有严格的数据类型检查
1.1.1 c
因为const修饰的变量不允许修改,但是只给了警告,不严谨
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++直接报错
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
#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
#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 函数重载
概念:函数名相同,函数的参数个数、顺序、类型不同,就称为“函数重载”
注意点:
函数重载是与函数的返回值无关(即返回值不同不构成重载)
例如:
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
#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;
}