c++初识
来源:互联网 发布:java去掉括号内容 编辑:程序博客网 时间:2024/06/08 05:53
1.命名空间 :
指的是用花括号把一部分文件括起来,并用namespace开头起一个名字:
#include <iostream>//输入输出流using namespace std;///库的所有组件都在std中声明和定义////名字空间:namespace开头起一个名字namespace my{int a = 0;}namespace you{int a = 1;}int main(){my::a = 1;you::a = 2;cout<<my::a<<endl;cout<<you::a<<endl;return 0;}
就像上面的例子一样,在my和you里分别定义了两个a,但它们并不冲突,属于不同的命名空间。
::是作用域解析符。
using namespace std; 库的所有组件都在std中声明和定义,举个例子,输出"hello world"
using namespace std;///库的所有组件都在std中声明和定义int main(){cout<<"hello world"<<endl;return 0;}
cout,endl(换行)就是在std中声明和定义,如果没有using namespace std;这句代码,输入的那句就要改为:
std::cout<<"hello world"<<std::endl;
有时候使用std也有缺陷:
using namespace std;int cout = 1;int main(){std::cout<<"hello world"<<std::endl;std::cout<<cout<<std::endl;}
这句代码中,cout不明确,如果去掉std:
int cout = 1;int main(){std::cout<<"hello world"<<std::endl;std::cout<<cout<<std::endl;}
那么一个cout是库里的,一个是定义的,程序就不会出错。2.C++基本的输入输出流
cout:标准输入流对象,<<输出操作符
cin:标准输入流对象,>>是输入操作符
endl:换行
int main(){int a = 0;double b = 0.0;cin>>a;cin>>b;cout<<a<<endl;cout<<b<<endl;//自动识别类型return 0;}
3.重载是什么?,C++为什么支持重载?
简单的说:重载就是在同一作用域内,函数的函数名名可以相同,单数参数的个数或者类型不同,返回值是什么都可以。举个例子:
void fun1(int a,int b) //Z4fun1ii{cout<<a<<endl;cout<<b<<endl;cout<<endl;}void fun1(int a) //Z4funi{cout<<a<<endl;cout<<endl;}int main(){fun1(5);fun1(1,2);}
这个程序是是没有出错的。查看汇编代码,其实函数名并不是fun1,而是
Z4fun1ii 和 Z4fun1i
那么经过研究,函数名其实是:
Z+函数名有几个字母+函数名+参数类型的首字母
4.C++缺省参数
全缺
int ADD(int a = 10,int b = 20)//不传参{return a+b;}int main(){cout<<ADD()<<endl;//不传参cout<<ADD(30)<<endl;//传一个,第二个默认return 0;}
半缺:
int ADD(int a,int b = 20) // 只能从右往左缺省{return a+b;}int main(){cout<<ADD(30)<<endl;return 0;}
5.指针和引用:
引用:就是给已定义的变量取个别名,类型名&引用变量名 = 已定义过的变量名
注:一个变量名可取多个别名
引用必须初始化
引用只能初始化一次,引用之后不能再指向其他变量
int main(){int a = 10;int& b = a; //b是a的引用(别名),它们指向相同a = 20;b = 30;}
通过监视,可以看出a改变那么b也改变,b改变那么a也改变
const引用和类型不同的引用:
int main(){//1.const int a = 10;//int& b = a;//错const int& b = a; //a的别名,但是可读不可改//2.int c = 30;double d = 40.0;const int& e = d;//d赋值给e时会生成一个临时变量,e是临时变量的别名,它具有常性,所以要加constreturn 0;}
①:引用作参数:
void swap(int& a,int&b)//a是x的别名,b是y的别名!{int c = a;a = b;b = c;}int main(){int x = 1;int y = 2;swap(x,y);cout<<x<<endl;cout<<y<<endl;return 0;}
这样做的好处是比指针传递的效率高很多。
②:引用作返回值:
我用一个ADD函数分别说明传值作返回值和传引用作返回值:
传值作返回值;
int ADD(int a,int b){int ret = a+b;return ret;}void main(){int a = 3;int b = 4;int c = 0;c = ADD(a,b);cout<<c<<endl;}
查看汇编:
画图一目了然:
传引用作返回值:
int& ADD(int a,int b){int ret = a+b;return ret;}void main(){int a = 3;int b = 4;int& c = ADD(a,b);cout<<c<<endl;ADD(10,30);cout<<c<<endl;}我们来看看结果;
怎么会这样呢,已经把ADD(3,4)的值给了c,那么c就是7,只是做了ADD(30,10)的操作,c的值怎么会变呢?
来看汇编代码:
实际上,c也是ret的别名,但ret出了函数,已经销毁了,所以是越界。
所以说,不要返回一个临时变量的别名。,出了作用域还存在,那么可以用引用返回。
.指针与引用的区别:引用更安全,指针更灵活。
1.引用只能在定义的时候初始化一次,之后不能改变指向其他变量,但指针可变。
2.指针可以为空,引用不能指向无效的变量。
3.sizeof(引用)->所指变量的大小。
sizeof(指针)->4或8.
4.指针++和引用++意义不同。
5.语法上,引用没开辟空间,底层上,它和指针的实现方式一样!
- 初识C#
- 【C#】初识
- 初识 C#
- 【C#】初识
- [C学习]指针初识
- C#----初识正则表达式
- Pro*C初识
- 初识c指针
- Object C 初识
- 1.1--初识C语言
- objective-C 初识
- 初识协程 "C"
- 初识Object-C对象
- 【初识C++】switch语句
- 初识C语言
- 初识Objective-C Runtime
- C#-初识委托
- 初识 Objective - C
- hdu 1281 棋盘游戏
- [cnbolgs镜像]iOS9 & Xcode7 下设置LaunchImage启动图片 问题及解决
- Python 常见面试题(不断更新)
- angular 绑定html
- [cnblogs镜像]页面定制CSS代码初探(一):页面变宽 文本自动换行 图片按比缩放
- c++初识
- 动态添加元素后 js点击 DOM查找不到
- WebService详解
- 1021. 个位数统计 (15)
- HDU 5510 Bazinga(KMP||strstr神器+些许优化)
- 栈的简单使用和运行结果
- 《Effective Java》(23~25)阅读笔记
- [cnblogs镜像]页面定制CSS代码初探(二):自定义h2标题样式 添加阴影 添加底色 等
- 【洛谷3335】【ZJOI2013】蚂蚁寻路