前言
在了解 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 只能定义在全局,但是可以嵌套定义。
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;
}
2.2 全缺省函数:把全部形参给上缺省值
void Tset02(int a = 1, int b = 10, int c = 20)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
在调用该函数时,若没有指定实参,则自动调用该函数形参的缺省值,否则使用指定的实参。
C++规定带缺省参数的函数必须从左向右依次给实参。
注意:
函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现。
3.函数重载
C++ 支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。C语言 是不支持同一作用域中出现同名函数的。
3.1 参数类型不同
3.2 参数个数不同
3.3 参数类型顺序不同
注意:
返回值无法作为区分重载函数的条件。编译器无法区分以返回值作为区别的重载函数。
4.引用
11.1 引用的概念和定义
引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同⼀块内存空间。
比如:水浒传中李逵,宋江叫"铁牛",江湖上人称"黑旋风";林冲,外号豹子头;
类型& 引用别名=引用对象
11.2 引用的特性
11.2.1 引用在定义时必须初始化
11.2.2 ⼀个变量可以有多个引用
11.2.3 引用⼀旦引用⼀个实体,再不能引用其他实体
11.3 const引用
普通变量可以用 const 引用
const 修饰的变量也可以引用,但是必须用 const 引用(权限的缩小)
这里涉及的是权限的放大缩小问题。简单来说,引用的权限可以缩小,但是不能放大。
• 不需要注意的是类似 int& rb = a*3; double d = 12.34; int& rd = d; 这样⼀些场景下 a*3 的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产生临时对象存储中间值,也就是,rb 和 rd 引用的都是临时对象,而C++规定临时对象具有常性,所以这里就触发了权限放大,必须要用常引用才可以。
• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。
5.inline(内联函数)
6.nullptr
C++11引入 nullptr ,nullptr 是一个特殊的关键字,它可以转换成任意其他类型的指针类型。使用nullptr 可以避免类型转换的问题。因为nullptr 只能被隐式的转换成指针类型,而不能被转换为整数类型。
总之,在C++中一切使用 NULL 的场合,都可以替换成 nullptr。
7.C++的输出&输入
这里单纯的C++ 的规定。没什么好讲的,硬记就完事了。
C++的输出:
C++的输入:
完。