C++基础入门介绍

一、命名空间的介绍

(1)什么是命名空间

命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序之间的同名的冲突。实际上就是一个由程序员命名的一块内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。

namespace AA
{
    int a;
    double b;
}

namespace是定义命名空间所必须写的关键字,AA是用户自己指定的命名空间的名字,空间名字可以由程序员自己指定,在花括号内是声明块,在其中声明的实体称为命名空间成员。现在命名空间成员包括变量a和b,注意a和b仍然是全局变量,仅仅是把它们隐藏在指定的命名空间中而已。如果在程序中要使用变量a和b,必须加上命名空间名和作用域分辨符“::”,如AA::a,AA::b。这种用法称为命名空间限定,这些名字(如AA::a)称为被限定名。C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是人们设立若干子目录,把文件分别放到不同的子目录中,不同子目录中的文件可以同名。调用文件时应指出文件路径。

(2)命名空间的作用:

是建立一些互相分隔的作用域,把一些全局实体分隔开来。例如:

namespace AA
{
    int a;
    float ch;
}
namespace BB
{
    int a;
    float ch;
}

因为他们处于不同的作用域,所以他们之间不会互相干扰,这就是C++力设置命名空间的作用。
如果想输出命名空间内成员的数据,调用方法如下:

cout<<AA::a<<endl;
cout<<BB::ch<<endl;
(3)命名空间的使用方法
namespace  空间名
(4)using namespace std代表的是什么意思?

我们在写一个c++程序的时候都会加上这样一句话,但是他是什么意思呢?这里我们来介绍一下。
C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 由于namespace的概念,使用C++标准程序库的任何标识符时,可以:

1)直接指定标识符

例如std::iostream而不是iostream。完整语句如下:

std::cout << std::hex << 3.4 << std::endl;

加入using std::cout; using std::endl; using std::cin; 则前面语句可以写成如下代码:

cout <

#include <iostream>
using namespace std;

这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout << hex << 3.4 << endl; 因为标准库非常的庞大,所以程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都放在名字空间std中。

二、c++基本输入输出流

cin是标准输入
cout标准输出

三、c++为什么支持重载?

定义:在C++中,我们也能够把具有相同功能的函数整合到一个函数上,而不必去写好多个函数名不同的函数,这叫做函数的重载。重载的本质是多个函数共用同一个函数名。重载的优点是便于我们作对比和理解。
这里我们用linux写了两个相同的函数查看一下他们的命名:
这里写图片描述

然后编译 ,我们使用objdump 命令去查看发现他们的命名是不同的,

这里写图片描述
因此,对于重载函数,做了总结,两个重载函数必须在下列一个或两个方面有所区别:

1、函数有不同参数。

2、函数有不同参数类型,
C++的这种编程机制给编程者极大的方便,不需要为功能相似、参数不同的函数选用不同的函数名,也增强了程序的可读性。

C++运算符重载的相关规定如下:

(1)不能改变运算符的优先级;

(2)不能改变运算符的结合型;

(3)默认参数不能和重载的运算符一起使用;

(4)不能改变运算符的操作数的个数;

(5)不能创建新的运算符,只有已有运算符可以被重载;

(6)运算符作用于C++内部提供的数据类型时,原来含义保持不变。

四、C++缺省参数

缺省参数同函数重载一样,给程序员提供了很多方便,它们都使我们可以在不同的场合使用同一名字。不同之处是,当我们不想亲手提供这些值时,由编译器提供一个缺省参数。有时可用缺省参数代替函数重载。用函数重载我们得把一个几乎同样含义、同样操作的函数写两遍甚至更多。当然,如果函数之间的行为差异较大,用缺省参数就不合适了。

我们写个简单小程序来看看吧。

int Add(int a, int b=20)
{
    return a+b;
}
int main()
{
    cout<<Add(10)<<endl;
    return 0;
}
//结果为30

关于缺省参数的总结:

  在使用缺省参数时需注意以下几点。
(1)只有参数列表的后部参数才可是缺省的,也就是说,我们不可以在一个缺省参数后面又跟一个非缺省的参数。
例如cout<<Add(,10)<<endl是不合理的。
(2)一旦我们开始使用缺省参数,那么这个参数后面的所有参数都必须是缺省的。(从左至右,第一个为缺省,则所有均为缺省参数。)
缺省参数只能放在函数声明中,通常在一个头文件中。编译器必须在使用该函数之前知道缺省值。
小小补充:函数定义与原型(声明)中的参数名称可以不同,编译器只检查参数类型是否相同;相同,编译通过;反之,不通过;

五、.指针和引用的介绍

(1)指针的概念我们不做过多的解释,我们主要解释什么是引用,引用不是一个新的变量,而是一个别名。就像我们大多数人有一个大名,但是在家里面的时候会有一个小名一样,小名和大名都代表的是自己。
引用的符号是&, 使用方法:类型名+&, 例如:

int a = 10;
int& b = a;

这里b就是a的一个别名。
(2)引用的特点
1.一个变量可以有多个别名

int a = 10;
int& b = a;
int& c = a; //这些引用都是可以的,这里都代表的是a

2.引用只能在初始化的时候引用一次,不能再引用其他的变量

int a = 10;
int& b = a;
int c = 20;
int& b = c;  //引用错误,只能引用一次

3.引用必须初始化

int a = 10;
int &b;   //错误的引用

(3)引用作为参数
1.值传递,我们都曾写过两个数的交换问题

void Swap(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}//很明显这里两个数是不能进行交换的,原因不做过多解释

引用传递

void Swap(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
} //形参为引用,是实参的一个别名,因此可以实现交换

2.指针传递

void Swap(int* a, int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
} 

(3)引用作为返回值
写了一个简单地小程序来做一下对比
这里写图片描述

通过查看他们的汇编语句,查看二者的不同
这里写图片描述
这里写图片描述
从中我们可以看到,引用作为返回值,返回的是地址

六、指针与引用的比较(重点)

(1)引用比指针更加安全。因为指针容易出现野指针等问题,所以很多语言里面都将指针去掉了。
(2)引用只能引用一次,指针可以改变。
(3)对指针和对引用求sizeof是不同的,sizeof指针是求地址的大小,sizeof引用是求对应的变量的大小。
(4)引用不可为空,指针可以为空。
(5)指针(–)和(++)不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值