1.命名空间
std是c++中所有库的总和命名空间
//编译器 搜索:1.当前局部域 2.全局域
//::域作用限定符
#include<stdio.h>
//命名空间 //访问
namespace bit1
{
//在命名空间可以存放变量,函数,结构体等
int x=2;
}
//展开命名空间
using <命名空间名>::<要释放的变量或方法>
using namespace bit1;
//全局域 //影响声明周期 访问
int x=0;
int main()
{
//局部域 //影响声明周期 访问
int x=1;
printf("%d",x);
//::前没有命名空间则全局搜索
printf("%d",::x);
//如果有指向就去指定找
printf("%d",bit1::x);
}
域名空间就是定义一个新的作用域,同时命名空间可以叠加(套娃)。
2.输入输出
输入istream类
cin >><变量名> >>endl; //endl为换行,可删除或替换‘\n’
输出ostream类
cout >><变量>;
int main()
{
int roat;
//在c++中cin自带类型匹配,如:该为int类型
cin>>roat; //输入:97
cout<<roat; //输出:97
return 0;
}
int main()
{
char roat;
//该为char类型
cin>>roat; //输入:97
cout<<roat; //输出:9
return 0;
}
问:那么还有一个7呢!
int main()
{
char roat,nat;//我们添加一个变量
cin>>roat>>nat;//同样:97
cout<<roat<<endl;//输出:9
cout<<nat;//输出:7
return 0;
}
3.类型范围划分规则
short类型存储空间范围规则
4.变量初始化
1.除了c语言中,
int <变量名>=<变量>;
赋初值的方法,c++还提供了其他方法。
2.在c++ 11中初始化方法
int hanmburgers={24};
采用这种方法时,可以使用/省略(=)如:
int emus{7}; //输出值:7
int rheas={12}; //输出值:12
同时,也可以括号中不包含任何东西,但默认位0:
int rocs={}; // 0
int psychics{};
5.缺省函数
故名思意,就是缺少参数的函数,一般在声明中说明。
规律:从左至右依次填充。
注意:缺省函数不可跳跃式的赋值。
#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
return a+b;
}
int main()
{
Add(1,2); //函数 a=1 b=2
Add(1); //函数 a=1 b=20
Add(); //函数 a=10 b=20
Add(,2); //不可以
return 0;
}
c语言为什么不支持重载?
c语言查找地址是通过(字符表)名字寻找的,不允许出现相同的名字。
c++中liunx才有Z<字符长度><函数名><类型前缀>,来比对.
如:
Z3Addii;
6.函数重载
函数重载要求,函数名相同参数不同。
如:1.
改变变量类型
#include<iostream> using namespace std; int Add(int a=10,int b=20) { return a+b; } double Add(double a=10.1,double b=20.1) { return a+b; } int main() { Add(10,20); Add(10.1,20.1); return 0; }
2.
改变变量位置
#include<iostream> using namespace std; int Add(int a=10,int b=20) { return a+b; } int Add(int a=10.1,double b=20.1) { return a+b; } int main() { Add(10,20); Add(10.1,20.1); return 0; }
3.
改变变量参数
#include<iostream>
using namespace std;
int Add(int a=10,int b=20)
{
return a+b;
}
int Add(int a=10)
{
return a+b;
}
int main()
{
Add(10,20);
Add(10);
return 0;
}
7.引用
7.1引用概念
类型&对象名=引用实体;
如:
int & re=a;
注意:引用类型必须与对象是同种类型。
特性:
1.一个对象可以有多个引用(别名),且都指向他。
2.引用指向的对象不能改变,且一定有赋初值。
7.2常引用
const int &a=10;
//int &ra=a;//a为常量
const int &re=a;
//int &e=10;
const int &e=10;
const int &e=10;
7.3使用场景
1.做参数(交换值)
void Swap(int& a,int& b ) { int temp=a; a=b; b=temp; } int main() { int a=10,b=20; Swap(a,b); cout<<a<<" "<<b; return 0; }
2.返回值
仅仅了解即可,知道能这样用:
返回值只可为:全局变量/静态变量、堆空间等的数据。
struct SLNode
{
int *ret;
int data;
int size;
void INT()//初始化
{
ret=(int*)malloc(sizeof(int)*4);
size=4;
data=0;
}
void PushBack(int x)//入值
{
//扩容...
ret[data++]=x;
}
int& Get(int x)//取值
{
assert(ret);
return ret[x];
}
};
int main()
{
SLNode sl;
sl.INT();
sl.PushBack(1);
sl.PushBack(2);
sl.PushBack(3);
sl.PushBack(4);
for(int i=0;i<sl.size;i++)
{
if(sl.ret[i]%2==0)
{
sl.Get(i)*=2;
}
cout<<sl.ret[i]<<" ";
}
}
7.4引用与指针的区别
在语法上:
1.引用只是别名,没有开辟空间,指针存放地址,开辟空间。
2.引用需要赋初值,指针没要求
3.引用指向对象后不能更改,指针可以改变指向
4.引用没有NULL
5.引用+1是对象+1,指针是 地址后移一位
6.sizeof含义不同,引用时类型的大小,指针是地址空间字节数
7.有多级指针,没有多级引用
在底层:
引用的底层是指针实现的,有开辟空间。
8.内联函数
想必在c语言阶端已经堆宏函数的麻烦受不了,在c++中也不会在想受其苦难了吧,那么现在开始感谢我们伟大的c++祖师爷本贾尼.斯特劳斯特卢普,以inline修饰的函数叫做内联函数,编译时会在调用内联函数的地方展开,没有函数调用建立栈帧的开销
8.1模型
inline int Add(int a,int b)
{
return a+b;
}
int main()
{
int ret=Add(1,2);
cout<<ret;
return 0;
}
8.2特性
1.inine是一种空间换时间的做法,其缺点也很明了:可能使目标文件变大,优势:少了调用的开销、效率提升等。
2.inline对于编译器只是一个建议,不同编译器关于inline实现机制有所不同,在函数规模较小,不是递归,且频繁调用的函数采用。
3.inline不建议声明与定义分离,因为inline展开就没有函数地址了,链接就找不到。
宏的优缺点?
优点:
1.增强代码复用性。
2.提高性能
缺点:
1.维护差,可读差,误用率高。
2.不方便调用宏
3.没有类型检查
两者优点各异,自行选择。