
◆博主名称:少司府
欢迎来到少司府的博客☆*: .。. o(≧▽≦)o .。.:*☆
⭐数据结构系列个人专栏:
⭐编程基础训练系列个人专栏:
⭐名不显时心不朽,再挑灯火看文章
目录
[2.1 命名空间的价值](#2.1 命名空间的价值)
[2.2 namespace的定义](#2.2 namespace的定义)
[2.3 命名空间的使用](#2.3 命名空间的使用)
[4.1 缺省参数类型](#4.1 缺省参数类型)
[4.2 缺省参数调用规则](#4.2 缺省参数调用规则)
[6.1 引用的概念和定义](#6.1 引用的概念和定义)
[6.2 引用的特性](#6.2 引用的特性)
[6.3 引用的作用](#6.3 引用的作用)
[6.4 const 引用](#6.4 const 引用)
[6.5 引用与指针的关系](#6.5 引用与指针的关系)
[7.1 内联的定义及使用](#7.1 内联的定义及使用)
[7.2 内联的实际使用](#7.2 内联的实际使用)
一、第一个C++程序
cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello world!" << endl;
return 0;
}
如图,这是一个打印hello world的程序。
与C语言相同的是,C++在控制台打印东西也需要包含头文件。<iostream>就是C++的一个标准输入输出流,cout则是一个控制标准输出的对象。
二、命名空间
2.1 命名空间的价值
在C语言中,变量和函数是大量存在的,在包含很多头文件之后,我们在自己写程序的时候就可能引发严重的命名冲突。
在此基础上,C++引入namespace命名空间来解决这一问题。
2.2 namespace的定义
1)、定义命名空间,用namespace关键字,后接命名空间的名字,然后接一对{}。
cpp
namespace bity
{
int rand=0;
}
2)、namespace本质是定义出一个域,这个域和全局域独立,不同的域可以定义同名的变量。
3)、C++中有函数局部域,全局域,命名空间域 ,类域;命名空间域和类域不影响生命周期。
4)、namespace只能定义在全局,不过可以嵌套定义。
5)、C++的标准库都放在一个叫std(standard)的命名空间中。
cpp
namespace Bity
{
namespace cxr
{
int x=0;
}
}
int main()
{
std::cout << Bity::cxr::x << std::endl;
return 0;
}
如图是打印x的值,:: 是域作用限定符,左边不写的时候默认访问全局域。
2.3 命名空间的使用
1)、指定命名空间访问
cpp
std::cout << "hello world!" << std::endl;
2)、using将命名空间中某个成员单独展开
cpp
using std::cout;
项目中经常访问的不冲突成员推荐这种方式。
3)、展开整个命名空间
cpp
using namespace std;
该写法风险大,可能引发严重的命名冲突,平时练习可以这样写,项目中不推荐。
三、C++输入输出
1)、<iostream>是Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
2)、std::cin 是istream类的对象,它主要面向窄字符的标准输入流
3)、std::cout 是ostream类的对象,它主要面向窄字符的标准输出流
4)、<< 是流插入 运算符(输出),>> 是流提取运算符(输入)
5)、std::endl 是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区
6)、C++的输入输出可以自动识别变量类型

四、缺省参数
4.1 缺省参数类型
缺省参数就是对于一个函数,赋值了的参数。主要分为全缺省 和半缺省。
cpp
void Func1(int a=1)
{
cout << a << endl;
}
void Func2(int a=1,int b)
{
cout << a << ' ' << b << endl;
}
如图,第一个函数为全缺省,第二个为半缺省。
4.2 缺省参数调用规则
1)、缺省参数必须从右到左连续缺省
2)、带缺省参数的函数的调用,必须从左到右依次传值
3)、函数声明和调用分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值
4)、缺省值可以是常量,也可以是全局变量
5)、没有传参时,使用默认缺省值,传参时,使用指定实参
五、函数重载
C++支持在同一作用域 出现同名函数,但是要求这些同名函数形参不同。这样,C++函数的调用就表现出多态的行为。(静态的多态)

六、引用
6.1 引用的概念和定义
引用是给已存在的变量取一个别名 ,编译器不会为引用变量开辟内存空间,它和它的引用变量共用一块内存空间。形式如下:
cpp
// 类型& 别名=变量名;
// 类型& 别名2=别名1;
6.2 引用的特性
1)、引用在定义时必须初始化
2)、可以给别名取别名
3)、引用一旦引用一个实体,就不能再改变指向。
6.3 引用的作用
1)、作用于函数的传参和作为返回值
2)、引用作为返回值时可以同时改变++引用对象++和++被引用对象++
cpp
int STTop(ST& rs)
{
assert(rs.top>0);
return rs.a[rs.top-1];
}
STTop(st1)=3;
如上图,该写法是错误的。返回值在返回的时候会格外开一个临时对象 ,这个临时对象有常量的属性,其不能被赋值。
cpp
int& STTop(ST& rs)
{
assert(rs.top>0);
return rs.a[rs.top-1];
}
STTop(st1)=3;
该写法是对的,因为它返回的是引用,也就是栈顶数据变量本身,可以修改。
6.4 const 引用
1)、对于一个const对象 ,必须用const引用
cpp
const int a=10;
// int& ra=a; error,权限放大
const int& ra=a;
2)、对于普通变量 ,可以用const 引用
cpp
int b=20;
const int& rb=b;//权限缩小,rb只读不能改,但b可以
3)、const引用可以给常量取别名
cpp
const int& rc=30;
4)、const引用可以引用临时对象
cpp
double d=12.34;
int i=d;
const int& rd=d;//double->int 会发生隐式类型转换产生临时对象
产生临时对象总结:
1)、函数传值返回
2)、表达式结果
cpp
const int& rc=(a+b);
3)、类型转换
6.5 引用与指针的关系
1)、语法上引用是取别名不开空间,指针存放变量地址,需要开空间
2)、引用在定义上必须初始化,指针可以不初始化
3)、引用在引用一个实体后,不能改变指向,指针可以改变指向
4)、引用可以直接访问对象,指针需要解引用
七、inline内联
7.1 内联的定义及使用
用inline 修饰的函数叫内联函数,编译C++程序时会展开内联函数 ,让函数直接在调用的地方使用,而不是开辟栈帧,提高效率。
cpp
#define ADD(a,b) ((a)+(b))
cout << ADD(2&3,2|3) << endl;
用inline 来减少因宏的错误使用而引发的错误。
7.2 内联的实际使用
1)、在vs的debug版本下,为了方便调试,默认内联是不展开的
2)、inline 对编译器来讲,只是建议展开,编译器也可以选择不展开
3)、inline 不建议声明和定义分离在两个文件,分离会引发链接错误
八、nullptr
cpp
//NULL实际是一个宏,C语言中是 #define NULL ((void*)0)
// C++中是 #define NULL 0
nullptr是一个特殊的关键字,是一种特殊类型的字面量,它可以转换成任意的其他指针类型
本期的分享就到这里,如果觉得博主的文章比较对胃口的话,可以点一个小小的关注~
您的三连是我持续更新的动力~