[总结]C++真是博大精深(一)


C++的输入/输出和非面向对象的一些特性

(最终解释权归原文作者所有,侵权必究)

1、C++语言是C语言的超集,C语言中的表达式、语句、函数等在C++中仍然可以使用,C++语言是面向对象的语言,但是也包含一些非面向对象的特性。

2、#include<iostream>是编译预处理命令,用于指示编译器在进行程序预处理时,将文件iostream中的代码展开在该命令所在的位置。iostream是C++系统中定义的一个头文件,该文件中声明了与输入/输出有关的信息,如流对象cin、cout和运算符<<、>>的定义等。

3、usingnamespace std;的意思是使用命名空间std。通过命名空间,可以保证不发生命名冲突。std是标准C++指定的一个命名空间,标准C++库里的所有标识符(如cin、cout等)都是在此命名空间中定义的,在使用这些标识符时,通过语句using namespace std;告诉编译器这些标识符可以在命名空间std中找到。

4、cout是标准输出流对象,与标准输出对象相关联。这里的标准输出设备通常指显示器。运算符<<在C语言中表示位左移操作。在C++语言中,<<除了表示左移操作外,还可以用于输出,即将<<右边的数据写到标准输出流对象cout中,在显示器上进行显示,cout通常与<<结合使用。

5、cin是标准输入流对象,与标准输入设备相关联。这里的标准输入设备通常指键盘。运算符>>在C语言中表示位右移操作。在C++语言中,>>除了表示右移操作外,还可以用于输入,即将从标准输入流对象(键盘)中读取的值传送给右边的变量。cin通常与>>结合使用。

6、⑴允许通过<<输出多个数据。

⑵允许输出表达式的值。

⑶运算符>>允许用户从键盘输入多个数据。它按照顺序从键盘输入中提取多个数据,并依次存到相对应的变量中。注意,在通过键盘进行多个数据的输入时,两个数据之间要使用空格或者回车或者Tab键进行分隔。

⑷可以对输入/输出数据的格式进行控制。如可以通过操作符dec、hex和oct以不同进制的形式显示数据,其中dec是将基数设为十进制,hex是将基数设为十六进制,oct是将基数设为八进制,默认十进制。

7、在C++语言中,结构体、联合体和枚举名可直接作为类型名使用。不需要像C语言中的那样,在结构体、联合和枚举名的前面分别冠以struct、union、enum。

8、动态内存分配是指在程序运行时分配内存空间。动态内存分配的好处在于可以根据需要分配适当大小的内存空间,使用灵活。动态内存分配与释放是对进程内存空间的堆区进行操作。C++中可以通过new和delete运算符实现动态内存的分配与释放。

  ⑴new的使用:new类型名;new 类型名(初值);new 类型名[表达式]

    new运算符返回所分配内存空间的起始地址,通常需要把该返回值赋值给一个指针变量,以进行所分配内存的访问。new运算符完成两个工作:首先,根据对象的类型在自由存储区中分配适量的空间;其次,返回所分配空间的起始地址。当没有可用内存用于new操作时,new会返回0或抛出一个bad_alloc异常。

  ⑵delete的使用:delete指针变量名;delete []指针变量名;

    delete运算符用于释放new运算符所分配的空间,以使得该空间能够被重新使用。delete运算符的返回类型是void,因此它不能返回值。

9、在C++语言中,允许在代码块的任何地方定义局部变量。一般来说,在较短的函数代码中,将局部变量在函数开始位置集中定义比较好,这样在代码维护时能够迅速确定变量的定义位置;而在代码较长的大函数中,通常在靠近变量使用位置的地方定义变量较为合适,这样方便对程序变量的查看和使用。

10、引用就是另一个变量的别名;也就是说,引用和它所指的变量是同一个实体。引用的主要用途之一是作为函数的参数使用,在作为函数参数方面,它可以起到与指针参数相同的作用,但使用较指针参数要简便。

11、当将引用作为函数参数时,除了在函数的形参声明时需要加上引用符&之外,在其他使用的地方均不需要出现引用符&,而指针作为函数参数时,不但要在函数形参声明时加上符号*,而且在函数体操作指针所指向的空间时,还要加上间接访问操作符*,另外,在进行函数调用时,如果外部变量本身不是地址,则需要通过取地址符&取得外部变量的地址,然后传给函数相应的指针类型的形参。

12、通常情况下,在声明一个引用时,要对其进行初始化,类型 &引用名 = 已定义的变量名。

13、引用和指针的区别:

  ⑴引用和指针都可以通过一个变量访问另一个变量。但访问时的语法形式不同。引用采用的是直接访问形式,而指针采用的是间接访问形式。

  ⑵当作为函数参数使用时,引用所对应的实参是某个变量的名字,而指针所对应的实参是某个变量的地址。引用在作为函数参数使用时,其效果与指针相同,但使用更方便。

  ⑶引用在定义时被初始化,其后不能被改变(即不能再成为另一个变量的别名);而指针则可以通过重新赋值的方式,指向另一个变量(另一段内存空间)。

14、引用还可以作为函数返回值使用。当引用作为函数返回值使用时,函数调用可以出现在赋值运算符的左边;而通常情况下,函数调用是不能出现在赋值运算符左边的。

  ⑴当引用不作为函数参数或函数返回值使用时,在声明引用时,必须同时对其进行初始化,不能先声明,后赋值。

  ⑵对引用本身提供的初始化值,本身可以是一个引用。

  ⑶引用和取地址操作符的符号均为&,但二者的含义是不同的。

15、const关键字可以对变量进行修饰,以说明该变量是不可修改的。当const用于修饰函数参数时,说明该函数参数不能被该函数修改。使用const修饰符定义的变量是常值变量。该常值变量具有类型,而且有地址,可以通过指针进行读取,但是其值不能被修改。在通过C++编写程序时,通常使用const常量取代#define宏定义指令定义的符号常量。使用const定义常量可以避免这种因使用宏替换时不小心而造成的逻辑错误,更安全。

16、使用const关键字可以修饰指针,根据const出现的位置,可以分为三类:指向常量的指针,常指针和指向常量的常指针。

  ⑴指向常量的指针:const int *np=newint(5);不能通过该指针变量修改其所指向的内容,可以将新的地址值赋给它。

  ⑵常指针:int * const np =new int(5);该指针变量的值是常量,不允许被直接赋值,可以修改该指针所指向空间的内容。

  ⑶指向常量的常指针:const int *const np = new int(5);不能通过该指针变量修改其所指向的内容,也不能给该指针变量重新赋值。

17、当函数的形参是指针或者引用类型时,为了防止函数修改指针或引用所指向的内存数据,可以把形参定义为指向常量的指针或常引用。常引用所谓说明形式如下:const 类型 &引用名。

18、在C++程序中,如果函数调用出现在函数的定义之前,则必须在调用函数之前给出函数声明,它包括函数返回类型、函数名称、函数形参列表三个元素。其中函数形参列表可以只包括形参类型,省略形参名称。这三个元素被称为函数原型,函数原型描述了函数的接口。函数声明的目的是让编译器能够检查函数调用时传入的参数是否给出的函数声明相符合,从而减少编程时的差错。另外,通过进行函数声明,可以使程序的结构更清晰。

  ⑴在C++程序中,如果函数的定义在函数调用之后,则必须在调用之前给出函数声明。但如果函数的定义在前,调用在后,则不必给出函数声明,因为这时函数定义的首部已经起到了函数声明的作用。

  ⑵如果函数声明或定义中没有给出函数的返回值类型,则其默认类型为int。如果一个函数没有返回值,则必须在其函数声明及定义中写出其函数返回类型是void。这时可以在函数定义中省略return语句。在C++语言中,如果在函数声明中没有标明参数,则说明该函数的参数表为空(void),即该函数不带任何参数。

19、内联函数又称为内置函数。当程序中出现对内联函数调用时,C++编译器直接将函数中的代码插到调用该函数的语句处,同时用实参来代替形参。使用内联函数的好处是减少了函数调用所产生的额外开销,可以提高程序运行的效率。通常情况下,对于要频繁调用的函数,如果其函数体中的代码很短,可以将其定义为内联函数。函数定义:inline 返回值 函数名(形参表)。

  ⑴在内联函数的函数体中,不能有复杂的控制语句,如for语句和switch语句。

  ⑵使用内联函数时,其函数体在使用位置被直接展开,这实际上是一种以空间换时间的方式。如果内联函数较长,调用的位置又很多,就会大大加长程序代码的长度,造成大的空间开销。因此只有很短(1到5行语句)且调用频繁的函数才考虑定义为内联函数。

20、如果同名的两个变量中,一个是全局的,另一个是局部的,那么在局部变量的作用域内,局部变量将屏蔽掉全局变量。如果在局部变量的作用域内使用同名的全局变量,要通过作用域运算符”::”来实现。

21、函数重载是指可以使用相同的函数名定义多个功能相同或类似的函数,这些函数的区别在于函数参数的类型或个数不同。

  ⑴当调用函数名相同的重载函数时,编译器会根据实参的类型与个数来匹配这些重载函数,以决定调用哪一个重载函数。

  ⑵在定义重载函数时,可以通过函数参数类型的不同区分不同的函数,也可以通过函数参数个数的不同来区分不同的函数。不能仅仅通过函数返回值类型的不同来区分不同的重载函数。

  ⑶在进行函数调用时,如果实参与形参的类型不同,编译器会自动进行类型转换,以匹配形参的类型。但在函数重载时,有时会出现问题。

22、在C++中,允许在函数声明或函数定义时给函数的形参指定默认值。在进行带默认参数函数的调用时,如果给出了实参,则将实参传递给形参;如果省略了实参,则将默认值传递给形参。

  ⑴在声明带默认参数的函数时,指定默认值的参数一定要在没有默认值参数的右边。

  ⑵在调用带有默认参数的函数时,可以省略实参,直接使用形参的默认参数,也可以用实参来取代默认参数。

  ⑶如果定义的函数在函数调用之后,则在调用位置之前必须给出函数声明。这时对形参的默认值指定在函数声明中进行,而在后面的函数定义说明中不能再次给出默认值。如果函数的定义在函数调用之前,则直接在函数定义的函数说明中给出形参的默认值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值