【一】命名空间
C++ using namespace std 详解
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
1、域运算符(::)。例如std::ostream而不是ostream。完整语句如下:
std::cout << std::hex<< 3.4<< std::endl;
2、使用using关键字。
using std::cout;
using std::endl;
以上程序可以写成
cout << std::hex<< 3.4<< endl;
3、最方便的就是使用using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:
cout << hex<< 3.4<< endl;
实际运用意义:为了解决合作开发时的命名冲突问题
1.部分使用,域运算符(::)
2.全部使用,using namespace name;
3.别名声明using,使用时加上编译选项-std=c++11;using INT =int;(使用极少)
4.匿名命名空间&取别名(使用极少)
【二】产生随机数代码
#include<iostream>
#include<ctime>
#include<cstdlib>
srand(time(NULL));
int num=rand()%5;(产生0-4之间的随机整数)
【三】各种作用域情况分析
#include<iostream>
using namespace std;
void swapTwoNumber(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
const int b=20;
int b=20;
int &retFunc(int a)
{
return b;
}
int main()
{
int a=10;
int &ra=a;
cout<<“A=”<<a<<endl;
cout<<"RA="<<ra<<endl;
cout<<"&A="<<&a<<endl;
cout<<"&RA="<<&ra<<endl;
int a=100;
int b=200;
swapTwoNumber(a,b);
cout<<"A="<<a<<"B="<<b<<endl;
int &rc=retFunc(10);
cout<<"RC="<<rc<<endl;
retFunc(10)=80;
cout<<"B="<<::b<<endl;
cout<<&(::b)<<endl;
return 0;
}
【四】左值引用&右值引用
1.左值引用既可以绑定左值,又可以绑定右值
2.当绑定右值时,必须加上const
const int &rd=3
【五】C++新特性
1.命名空间namespace
2.函数重载与运算符重载
3.引用
4.面向对象特性(封装,继承,多态)
5.泛型编程(模板编程)
6.STL标准库
7.异常处理try—catch
【六】C++输入和输出
流运算符--输入运算符cin>>
输出运算符cout<<
以上均为对象而非关键字,是类中早已定义好的,使用时需要包含头文件iostream;
【七】C++函数
1.带默认值的函数
2.带占位参数的函数
3.函数的重载
【八】函数的重载
1.可以解释为什么返回值不构成函数重载,因为c++的函数名修饰规则不考虑返回值,只将函数名与参数结合起来组成新的函数名。
2.C++调用时会修改函数名(把函数参数与函数名结合)
3.定义:在同一作用域内,参数列表不同,函数名相同的函数。虽然函数名相同,但是函数所在内存位置不同,本质上还是不同的函数。
4.规则:函数名称必须相同,参数列表必须不同(个数不同,类型不同,参数排列顺序不同等)
函数的返回值类型可以相同也可以不同,不足以成为函数重载的依据。
5.关于const------需要根据具体形参含义进行确定。
【九】nullptr
c++11引入nullptr关键字,专门来区分空指针,0
nullptr的类型为nullptr_t,能够隐式转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。
【十】new和delete
new申请一块内存,并且初始化对象
delete释放一块内存,并且销毁对象
【十一】boolleix
bool类型只有两个取值。true和false:true表示“真”,false表示“假”
cout输出bool变量的值还是用数字1和0表示,而不是true或false。
bool isTrue=true;
if(isTrue)
{
cout<<"True"<<isTrue<<endl;
}
【十二】数组的初始化和赋值
int *arr=new int【4】{1,2,3,4};
cout<<arr[0]<<endl;
delete[]arr;
arr=nullptr;
(注意其中的数组越界:未被使用的空间,数据均为0)