C++的基础知识

前言

在了解 C++ 的基础知识之前,我们首先应该知道,C++ 兼容 C语言 的绝大多数语法,但是这两个语言不完全一样。

编译器编写 C++ 的程序,需要将文件名后缀名改为.cpp。

 

1.namespace(命名空间)

首先,想象一下这个场景,公司要完成一个项目,为此召集了一群优秀编程员组成一个项目组。但是这个组里面的成员在共同实现代码时,难免会碰到使用相同的变量名。这种情况下,谁该使用这个变量名呢?总不能两人比划比划看谁的拳头硬吧?

这时,作用域就出现了。C++ 允许不同域之间,使用相同的变量名。这样程序员之间也不用为了一个变量名而大打出手了。目前,作用域分为四类:①全局域、②局部域、③命名空间域、④类域。我们接下来介绍的,是其中之一的命名空间域。

 

1.1命名空间域的介绍

命名空间域,顾名思义,就是使用 namespace 函数定义出一个域,而这个域与全局域各自独立。也就是说,我们可以在项目中定义出一个域,不同域里面可以定义相同的变量名,这样就可以使用同一变量名啦。

namespace dza
{
	int a = 0;
}

 

1.2命名空间域使用

命名空间域有三种使用方法。

1.2.1指定命名空间访问,项目中推荐

namespace dza
{
	int a = 0;
}

int main()
{
	cout << dza::a << endl;

	return 0;
}

1.2.2using 将命名空间中某个成员展开,适合项目组人少,并且彼此定义的变量名不同的情况

namespace dza
{
	int a = 0;
}

using dza :: a;

int main()
{
	cout << a << endl;

	return 0;
}

1.2.3展开命名空间中全部成员,项目中不推荐这种方式,容易发生冲突。日常练习可以使用

namespace dza
{
	int a = 0;
}

using namespace dza;

int main()
{
	cout << a << endl;

	return 0;
}

 

注意:

1.namespace 只能定义在全局,但是可以嵌套定义。

87eaec72a5b449d29ea642a64f845d4d.png

08944737161741daa05cd68c3a8d35c9.png

2.项目工程多文件中定义的同名 namespace 会被自动认为是一类 namespace ,不用担心冲突。

namespace dza
{
	int a = 0;
}

namespace dza
{
	int b = 0;
}

int main()
{
	cout << dza::a << endl;
	cout << dza::b << endl;

	return 0;
}

3.C++ 标准库都放在一个叫 std(standard) 的命名空间中。只有展开 std 的域,才能使用 C++的函数。

using namespace std;

int main()
{
	int a = 0;
	cout << a << endl;

	return 0;
}

2.缺省参数(有些地方也叫默认参数)

缺省参数是声明或定义函数时为函数的参数定义一个缺省值。缺省函数分为半缺省函数和全缺省函数。

2.1 半缺省函数:把部分形参给上缺省值

(C++ 规定半缺省参数必须从右向左依次连续向右缺省,不能间隔跳跃给缺省值)

void Tset01(int a = 1, int b, int c)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

45fbfda27b64491db867d96487248736.png

2.2 全缺省函数:把全部形参给上缺省值

void Tset02(int a = 1, int b = 10, int c = 20)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

在调用该函数时,若没有指定实参,则自动调用该函数形参的缺省值,否则使用指定的实参。

C++规定带缺省参数的函数必须从左向右依次给实参。

1957b0b5542f432dbb53bf8a4f8624fe.png

37a82e21080d4f42b6c0dfcaa0758903.png

107729edf5ca4b3e9a855807f45dc2f6.png

注意:

函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现。

48dd6d83e6894a2cb0f3025283d51ded.png

3.函数重载

C++ 支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。C语言 是不支持同一作用域中出现同名函数的。

3.1 参数类型不同

e1fd14de6513468699b8f93fe5ec9348.png

3.2 参数个数不同

86023d5551624250add9c417bba1db7d.png

3.3 参数类型顺序不同

ae215390c0b14a80bb0b46d145220aa5.png

注意:

返回值无法作为区分重载函数的条件。编译器无法区分以返回值作为区别的重载函数。

d8afa239885d4524a205ea8c30dcc3f4.png

 

4.引用

11.1 引用的概念和定义

引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同⼀块内存空间。

比如:水浒传中李逵,宋江叫"铁牛",江湖上人称"黑旋风";林冲,外号豹子头;

 类型& 引用别名=引用对象

c144ab5c89574beaa40fe7e20bd7be1d.png

11.2 引用的特性

 11.2.1 引用在定义时必须初始化

e8d17bbfcc5345289489c18935e6b373.png

11.2.2 ⼀个变量可以有多个引用

8afffa6c31de442db045629e19589c0d.png

11.2.3 引用⼀旦引用⼀个实体,再不能引用其他实体

fc55af5a487f432080f4bd9ba2b81e9a.png

11.3 const引用

普通变量可以用 const 引用

370e5108c81e43e49fd03a5a53ac54f5.png

const 修饰的变量也可以引用,但是必须用 const 引用(权限的缩小)

b686d5997d64461d94fcddfa8f3b2c80.png

这里涉及的是权限的放大缩小问题。简单来说,引用的权限可以缩小,但是不能放大。

 

• 不需要注意的是类似 int& rb = a*3; double d = 12.34; int& rd = d; 这样⼀些场景下 a*3 的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产生临时对象存储中间值,也就是,rb 和 rd 引用的都是临时对象,而C++规定临时对象具有常性,所以这里就触发了权限放大,必须要用常引用才可以。

• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。

275389d054704be498241ab708b984a9.png

 

5.inline(内联函数)

在 C++ 中,用 inline 修饰的函数被称为内联函数。这样调用内联函数就可以建立栈帧,提高程序的效率。
 
inline 对于编译器而言只是⼀个建议,也就是说,你加了 inline 编译器也可以选择在调用的地方不展开,不同编译器关于 inline 什么情况展开各不相同,因为C++标准没有规定这个。inline适用于频繁调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上  inline 也会被编译器忽略。
 
C语言实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不方便调
试,C++设计了 inline 目的就是替代C的宏函数。
 
C语言的宏展开:
 
745cfece89324c0facaf1d57c9f5cca2.png
 
C++的  inline:
 
773c5b9e4a644b91b2cc0b9f1528a3d0.png
 
 

6.nullptr

C++11引入 nullptr  ,nullptr 是一个特殊的关键字,它可以转换成任意其他类型的指针类型。使用nullptr 可以避免类型转换的问题。因为nullptr 只能被隐式的转换成指针类型,而不能被转换为整数类型。

总之,在C++中一切使用 NULL 的场合,都可以替换成 nullptr

 

7.C++的输出&输入

这里单纯的C++ 的规定。没什么好讲的,硬记就完事了。

C++的输出:

1e08b61361094a5ba5d42ee879af3445.png

 

C++的输入:

b15dcbf1803f4d7c928db952dba6fe04.png

完。

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值