目录
前言
C++ 读作”C加加“,是”C Plus Plus“的简称。顾名思义,C++是在C的基础上增加新特性,玩出了新花样,所以叫”C Plus Plus“,就像 iPhone 6S 和 iPhone 6、Win10 和 Win7 的关系。
C语言是1972年由美国贝尔实验室研制成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的Go语言,刚出生就受到追捧。C语言也是”时髦“的语言,后来的很多软件都用C语言开发,包括 Windows、Linux 等。
但是随着计算机性能的飞速提高,硬件配置与几十年前已有天壤之别,软件规模也不断增大,很多软件的体积都超过 1G,例如 PhotoShop、Visual Studio 等,用C语言开发这些软件就显得非常吃力了,这时候C++就应运而生了。
C++ 主要在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。
C++和C的血缘关系
早期并没有”C++“这个名字,而是叫做”带类的C“。”带类的C“是作为C语言的一个扩展和补充出现的,目的是提高开发效率,如果你有Java Web开发经验,那么你可以将它们的关系与 Java 和 JSP 的关系类比。
这个时期的C++非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将C++代码”翻译“为C语言代码,再通过C语言编译器合成最终的程序。
随着C++的流行,它的语法也越来越强大,已经能够很完善的支持面向对象编程和泛型编程。但是一直也没有诞生出新的C++编译器,而是对原来C编译器不断扩展,让它支持C++的新特性,所以我们通常称为C/C++编译器,因为它同时支持C和C++,例如 Windows 下的微软编译器(cl.exe),Linux 下的 GCC 编译器。(以上内容引自C语言中文网)
书归正传,让我们来康康C++对C的拓展与提升!!!
扩展一: 作用域运算符 (::)
:: 是运算符中等级最高的,它分为三种:全局作用域符,类作用域符,命名空间作用域符。但实际上本质是一样的,目的都是对变量所属命名空间(下面会提到)的描述限制。
作用:
1)解决归属问题:局部变量与全局变量同名,可直接访问全局变量(屏蔽就近原则)。
char ch; //全局变量
void sleep()
{
char ch; //局部变量
ch(局部变量) = ch(局部变量) *ch(局部变量) ;
::ch(全局变量) =::ch(全局变量) *ch(局部变量);
}
只写(:: + 变量 )表示对全局变量的使用。
扩展二: 命名空间(namespace)
1)定义: namespace + 命名空间名
特殊命名空间std
std是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。
2)作用:
- 与作用域符号配合使用,解决变量归属问题(防止命名冲突)
- 打包数据与函数(类和结构体也可抽象为命名空间)
3)特点:
- 命名空间可以相互嵌套
- 开放性,随时可以将新成员加入到已有空间
- 成员函数的声明与实现可分离
4)代码实现
namespace A
{
//成员属性定义
int a;
char b;
//成员方法声明
void help();
}
//成员方法实现
void A::help()
{
cout << "help" << endl;
}
5)无名命名空间(使用较少)
特点:其中的数据与方法只能在当前源文件使用,类似加static修饰
6)取别名
namespace A
{
int a;
char b;
void help();
}
namespace B = A;
//之后B可以代替A使用
扩展三:using声明
//定义命名空间A
namespace A
{
int a = 10;
}
1)using可使指定的标识符可用
cout << A::a << endl;
2)using与函数重载
如果命名空间包含一组重载函数,using声明相当于声明了这个重载函数的所有集合
函数重载:指一系列函数名相同,但参数数量与类型不同的函数(对返回值无要求)
namespace B
{
void fun(){}
void fun(int x){}
void fun(int x, char y){}
}
int main()
{
using namespace B::fun; //就不需要在fun前加作用域了
fun();
return 0;
}
3)using修饰整个命名空间
会先查看当前普通变量,如果没有就再查看命名空间
int main()
{
using namespace A;
std::cout << a << std::endl; // a = 10 A作用域中的a
int a = 100;
std::cout << a << std::endl; // a = 100 就近原则
return 0;
}
4)懒人技巧
使用cout,cin时需要在前加作用域std::,可以在全局范围添加using声明,
#include <iostream>
using namespace std;
之后可以直接使用std空间内成员方法。
int main()
{
using namespace A;
cout << a << endl; // a = 10
int a = 100;
cout << a << endl; // a = 100
return 0;
}
欲知后事如何,且听下回分解