C到C++的起承转合(一)

         

目录

         前言

扩展一:   作用域运算符 (::)

扩展二:  命名空间(namespace)

扩展三:using声明

                  摘剑!!!


                                       前言

        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;
}

欲知后事如何,且听下回分解

摘剑!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客1号

感谢老板,老板大气!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值