c++入门基础知识

来源:互联网 发布:淘宝达人 开店 编辑:程序博客网 时间:2024/06/05 05:17

命名空间
刚开始接触c++,我们会发现与C语言相比不光头文件有所不同,还会发现using namespce std;这句话,其实这就是c++的命名空间。
(1)概念
命名空间是为了防止名字冲突提供更加可控的机制。命名空间分割了全局命名空间,其中每一个命名空间是一个作用域。由三部分组成,分别是namespace、空间名字和一系列由花括号括起来的声明和定义。
(2)作用
是建立一些互相分隔的作用域,把一些全局实体分隔开来。
(3)例子
命名空间和类就好比是文件夹和文件的关系。命名空间就像是文件夹,它包含了若干个文件,这样可以将定义的很多类整齐地摆放起来,不仅可以避免命名冲突,还可以简化对类成员的访问。用花括号把文件的一部分括起来, 并以关键字namespace开头给它
起一个名字:

namespace name1{int a = 0;}namespace name2{int a = 1;}name1: : a = 3;name2: : a = 4;::是作用域解析符

(4)优点
如果在程序一开始不写上using namespace std;那么每次使用时就要这样写,这样显然比较麻烦。
注:endl相当于c语言中的\n.

#include<iostream>//using namespace std;int main(){    std::cout<<"hello world"<<std::endl;    cout<<"hello world"<<endl;    return 0;}

(5)嵌套使用

#include<iostream>using namespace std;namespace you{    int a=1;    namespace me    {        int a=2;    }}int main(){    cout <<you::me::a << endl;     return 0;}

输入输出流

流:数据之间的传输操作。
输入输出操作是由istream输入流和ostream输出流提供的,iostream是从这两个类中派生的,允许双向输入和输出。这个库定义了3个标准流对象。
(1)cin:标准输入的istream类对象,使用户能够从终端读数据,默认是键盘。> > 是输入操作符。
(2)cout:标准输出的ostream类对象,使用户能够从终端写数据,默认是屏幕。< < 是输出操作符。
(3)cerr:标准输出的ostream类对象,cerr输出程序错误,默认是屏幕。

重载

(1)概念

所谓重载,其实就是“一物多用”。
函数重载,即在同一作用域类, 一组函数的函数名相同, 参数列表不同( 个数不同/类型不同) ,返回值可同可不同。不仅函数可以重载,运算符也可以重载,例如,运算符”<<”和”>>”既可以作为位移运算符,又可以作为输入操作符和输出操作符。

(2)原因

那么,为什么C++支持重载呢?其原因在于函数名的修饰规则。从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。
编译器内部完成了翻译部分:
1.预处理
2.编译过程:将高级语言转为汇编语言。
3.汇编过程:汇编语言转为二进制程序,生成目标文件。
4.链接部分:所引用的数据链接进来,形成可执行程序。
比如一个函数的声明如下:
void function(int x,int y);
在c语言中,编译器在编译后在库中的名字为_function
在c++中,编译器在编译后在库中的名字为_function_int_int,在链接时是找名字进行链接,由于C++中它们的名字不一样,所以就不会报错。
(3)规则

① 函数名要相同;
② 参数个数不同,参数类型不同,参数顺序不同,均可构成重载;
③ 返回值类型不同则不可以构成重载。

C++缺省参数

(1)概念:在函数声明或定义的时候给形参一个默认的参数。这样在调用该函数,如果没有给实参,函数的这个形参就默认为这个值。

// 全缺省参数int Add1 (int a = 0, int b = 0){return a + b;}//半缺省参数int Add2 (int a, int b = 0){return a + b;}int main(){count<<Add(1,2)<<endl;//此处用默认的(1,2)count<<Add()<<endl;//不传值时默认用缺省的(0,0)return 0;}

(2)使用规则

缺省参数赋值必须要连续且从右向左赋值;
不能把const的全局变量作为缺省值;
缺省值必须是常量;
调用时你只能从最后一个参数开始进行省略;

指针和引用

这里写图片描述

指针
学习C语言时已经知道,每一个数据都是有地址的,通过地址就可以找到所需的内存空间。
(1)概念:一个变量的地址称为该变量的指针。
(2)使用方法:基类型 * 指针变量名

*const指针*(常指针)int a=1;const int*p=&a;//定义了p为指向整形变量a的const指针变量*p=15;//非法(不允许通过指针变量改变它指向的对象的值)

指针的作用和特点前面已经有了深入学习,在这里不再加以详细介绍。

引用

(1)概念:引用不是定义一个新的变量, 而是给一个已经定义的变量重新起一个别名。
(2)使用方法:类型 &引用变量名 = 已定义过的变量名.

*普通引用*int mian(){    int a=10;    int&b=a;}
*const引用*int main(){    const int a=10;//a被const修饰,它的值就不能再被改变    int &b=a;//编译不能通过    const int &b=a;//此处可以通过,a的值改变b的值也会改变    const int &b=5; // 常量具有常性, 只有常引 用可以引 用常量}
*不同类型变量间的引用*int main(){    int a=20;    double b=30.123;    int &c=b;//不能通过    const int &c=b;//编译可以通过,原因见下图}

这里写图片描述
想要用int类型的c来引用double型的b,首先先会将b变量放入一个int类型临时变量,再用const int类型的c来引用这个临时变量,临时变量具有常属性,所以就需要有一个const int类型的名字来完成这个引用。

(3)特点
1. 一个变量可取多个别名
2. 引用必须初始化
3. 引用只能在初始化的时候引用一次, 不能改变为再引用其他的变量。

(4)作用

1.做参数#include<iostream>using namespace std;void swap(int&a,int&b){    int c=a;    a=b;    b=c;}int main(){    int x1=10;    int x2=20;    cout<<x1<<" "<<x2<<endl;    swap(x1,x2);    cout<<x1<<" "<<x2<<endl;}

2.做返回值

#include<iostream>using namespace std;int red;int &Add(int t1,int t2){    int ret=t1+t2;    return ret;}void main(){    int a=2,b=3;    int &c=Add(a,b);    cout<<c<<endl;}

指针和引用的区别

(1)指针是存储另一个对象的地址的变量,而引用是对象的别名。
(2)指针未被初始化或被删除时,应将NULL赋给它,但引用不能为空。
(3)sizeof指针对象和引用对象的意义不一样,sizeof引用是指向变量的大小,sizeof指针是指对象地址的大小。
(4)引用只能在定义时初始化一次, 之后不能改变指向其它变量( 从一而终), 指针变量的值可。
(5) 指针和引用自增(++)自减(–)意义不一样。
(6) 相对而言, 引用比指针更安全。

原创粉丝点击