C++入门

1.命名空间

        1.1命名空间的定义

        在C中,是不允许存在想用名字的变量名,函数名,这会导致冲突。而C++中引入了命名空间的概念,对标识符进行本地化,解决了命名冲突的问题。namespace这个关键词就是解决改问题。

        定义一个命名空间:定义命名空间需要namespace的关键词+名字+{}就可以定义好一个命名空间。{}中的成员就是命名空间的成员。

        

        注意:命名空间定义了一个新的作用域,命名空间中的内容就局限于改作用域中。同时一个工程中若出现两个相同命名空间的名字,编译器会将他们合并。

        1.2命名空间的使用

        命名空间的成员使用可以分为三种情况。

        1、局部展开

        使用using 进行局部展开  z3为名字   ::为域作用限定符  a为其中的变量。

        

        2、全局展开

        使用using namespace +名字 就是将命名空间的全部内容进行展开。这时候容易造成重命名的问题,自己练习的时候可以这样做,但是写项目的时候不要这样写,容易出现问题。

        3、用命名空间名字+作用域限定符

      2.输入与输出

        C中的第一堂课就是学习对自己的问候,用打印函数输出"hello word!"。C++也有关于自己的的输入与输出函数。来看看C++是如何进行自己的输入输出的。

        

        1.使用cout标准输出对象(c的prinf)和cin标准输入对象(c的scanf),必须包含头文件<iostream>以及命名空间std(c++标准库)。

        2.cout与cin是全局流对象,end1为特殊的C++符号表示换行。

        3.<<为流插入符号,>>为流提取符号。

        4.C++的流插入和提取是不需要控制个数,所以会比C方便一些。     

3.缺省参数

        缺形函数是在定义函数或函数声明的时候指定一个缺省值,当函数没有传入实参,会用缺省值进行代替,否则就使用实参。

        缺省有两个分类:1、全缺省参数。

                                      2、半缺省参数。

3.1 全缺省参数

        全缺省参数:

      3.2半缺省参数

        半缺省参数:

注意:1、函数传参的时候参数应该从左往右连续,不可有间隔。

           2、函数定义或声明的时候半缺省参数也应该从右往左连续

           3、实参需是常量或全局变量

           4、函数声明或定义只能出现一个缺省参数的定义。

4.函数重载

4.1函数重载的概念

        函数重载:函数重载是一种特殊的情况。C++中允许同一作用域中声明几个功能类似的重名函数,这些函数的形参列表(类型,个数,类型顺序)不同,都可以构成函数重载。

注:返回值的类型不会影响函数重载,因为编译器不能确定这是什么返回类型,是否有返回类。

4.2 C++中为什么支持函数重载

       一个项目是由多个头文件和多个源文件构成。在链接编译阶段,我们在A.cpp中调用B.cpp的ADD函数时。编译还未链接前 A.o的目标文件未找到ADD的地址,因为ADD是在B.o的文件中。在链接阶段就是用来处理该问题,链接器看到A.o中调用了ADD,ADD没有地址,就会调用B.o的符号表找到ADD将他们链接一起。那么链接时,面对ADD这个函数,编译器会用什么名字来找呢?不同编译拥有不同的规则。

        因为window命名规则过于复杂,所以用Linux下g++演示。、

采用c语言编译后:

        在 C中,寻找ADD函数是直接运用ADD函数名本身,所以不支持函数重载。

采用C++编译后

        在c++中,函数修饰使用Z+函数长度+函数名+类型首字母

5.引用

 5.1概念

        引用不是定义一个新的变量,它是给一个已经存在的变量取一个别名(类似与指针)。编译器不会给引用开辟一个内存空间,它和变量公用一块地址。

       引用的使用方式:类型 & 名字=引用实体。

        

       5.2引用特性

        1、引用只能引用一个实体

        2、一个变量可以多次引用        

        3、引用定义必须有初始化

        5.3常引用

      

        5.4使用场景

1、做返回值

2、做参数

注:引用会比传值的效率更高。(可以自己使用clock()进行测试)

        5.5指针与引用的区别

       从语法概念上,引用没有开辟一块新的空间,而指针开辟了一块新的空间。

        在底层上,引用是指针的另外一个概念,实际上是有一块空间的。

        引用与指针的区别:

        1、引用需要初始化,而指针可以不进行初始化。

        2、引用是概念上的一种别名,指针存储变量的地址。

        3、sizeof算引用算的是引用那个变量的类型大小,而指针算的是地址。

        4、引用只能引用一个实体,而指针变量可以指向任一同一类型的实体。

        5、指针++是类型变量大小的++,而引用++就是实体+1.

        6、引用没有多级引用,指针有多级引用

        7、无空引用却有空NULL

6.内联函数

        通过inline修饰的函数也叫内联函数。C++编译期间,调用inline修饰函数的地方,会进行展开,没有函数调用时开辟栈帧的开销。

         inline是一种用空间换时间的做法,它会提升效率,但会浪费时间。

        inline修饰的函数会跟宏一样进行替换展开,如果函数过多会使文件变大,但是会减少空间上的开销。inline对于编译器来说只是一个建议。不同编译器关于liline的建议也不同,一般建议:频繁调用,使用直接,行数少,不是递归函数的函数采用inline。编译器会自己判断是否同意建议。

        如果inline修饰的函数,函数行数大于75行,或者是递归函数,不太可能进行内联展开。

    

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值