|  | 
 
| C/C++语言程序设计辅导资料十四 一、主题:C++基础二、学习时间:2020年12月28日-2021年1月3日“不忘初心、牢记使命”主题理论学习:
 坚持党的领导,最根本的是坚持党中央权威和集中统一领导。党章规定“四个服从”,最根本的是全党各个组织和全体党员服从党的全国代表大会和中央委员会;党中央强调“四个意识”,最根本的是坚决维护党中央权威和集中统一领导。这都不是空洞的口号,不能只停留在表态上,要落实到行动上。
 摘选自《在十九届中央纪律检查委员会第二次全体会议上的讲话》三、知识脉络:
 第10章 C++基础
 10.1 C++概述
 10.2 程序结构、数据与操作
 10.3 函数与参数传递
 10.4 数据结构与数据访问四、学习要求:
 理解面向对象程序设计方法
 掌握面向对象技术的特点
 掌握C++语言的注释、预处理指令与头文件、命名空间
 掌握C++的数据类型
 掌握C++使用const定义常量
 掌握C++中函数的定义、声明和调用
 掌握C++中函数的参数与返回值
 掌握函数重载
 掌握函数重载函数默认参数
 理解函数调用二义性
 掌握C++中的指针变量
 掌握C++中的引用变量
 掌握new与delete运算符
 理解C++动态开辟空间与回收空间五、重点难点:
 面向对象的由来
 面向对象思想
 C++由来、特点
 C++程序开发步骤
 头文件与预定义指令、输入输出语句、常量与变量、数据类型、函数、动态空间申请与释放六、主要内容:
 1.面向过程程序设计思想
 C语言使用“面向过程”的程序设计方法,将复杂过程简单的按功能分层,从而解决问题。
 在面向过程的软件设计方法中存在以下问题:
 基于模块的设计方式,导致软件修改困难。
 功能与数据分离,不符合人们对现实世界的认识。
 自顶向下的设计方法,限制了软件的可重用性,降低了开发效率,系统难以维护。
 2.面向对象技术
 面向对象的技术将数据和对数据的操作作为不可分割的整体,采用数据抽象和信息隐蔽技术,力图使对现实世界问题的求解简单化。它符合人们的思维习惯。
 C++表示C的累加。由于C++基于C,所以这两种语言有许多共同的语法和功能,C中所有低级编程的功能都在C++中保留下来。但是,C++比其前身丰富得多,用途也广泛得多。C++对内存管理功能进行了非常大的改进,C++还具有面向对象的功能,所以C在功能上只是C++的一个很小的子集。C++在适用范围、性能和功能上也增强很多。3.面向对象方法定义
 定义一:面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试重构软件的方法。
 定义二: 面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构的不一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。4.面向对象特征
 封装:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位;二是尽可能隐蔽对象的内部属性和实现细节,对外形成一道屏障,与外部的联系只能通过公共接口实现。
 继承:子类自动共享父类数据和方法的机制,它由类的派生体现。一个子类直接继承父类的全部描述,同时可修改和扩充,继承是对父类的重用机制。
 多态:是在继承体系结构中,同一消息为不同的对象接受时可产生完全不同的行动。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定。5.程序结构、数据与操作
 注释
 单行注释以双斜杠开头(//)。
 多行注释以/*开始到*/结束。
 预处理指令与头文件
 头文件包含指令:头文件的代码可以是C++标准程序库中的文件,也可以是程序员创建自己的头文件。
 如果此程序没有此行,编译就会出现错误。
 cout << “Hello,C++ !"; 在这个程序中,名称cout在头文件iostream中定义,这是一个标准的头文件它提供了在C++中使用标准输入和输出功能所需要的定义。<iostream>头文件包含了cout的定义,没有它,编译器就不知道cout是什么。
 命名空间
 using namespace std; C++标准库中的实体名都用std来限定。cout的全名就是std::cout,其中的两个冒号称作范围解析运算符,std为命名空间,cout为对象名,std::cout表示命名空间std中的对象名cout。如果省略using指令,就必须把输出语句写为:std::cout <<" Welcome to C++ World!";
 数据类型
 
 变量
 变量定义与C语言相同。
 在C语言中,变量的声明只允许出现在程序块的开始; 而在C++语言中变量声明可以出现在任何位置。
 常量
 C++常量定义与C语言不同,C++中常量需要通过const关键字定义。相对来说,const更加现代,它是C++的一个关键字,其一般形式为:
 const 标识符=常量;
 常量只能读不能修改,并且定义时必须初始化。
 推荐用const,而不是#define预处理指令。
 其他
 字符集:C++程序区别大小写字母
 标识符:C++不限制长度,但只有前31个字符有效
 运算符:C++更加丰富,按功能可分为:
 算数运算符
 关系运算符
 逻辑运算符
 其他6.函数
 7.函数重载
 C++语言引进函数重载。
 在同一作用范围中为多个函数定义(其功能通常是相近的)指定一个共同的函数名,委托编译器根据每一个单独函数的形参个数、类型和位置的差别进行名称区分,并选择合适的函数调用匹配称为函数重载。
 int max(int a,int b){…}
 double max(double a, double b){…}
 调用 max(1.2f, 3.4f)?;
 会调用参数为double类型的函数,float类型会向double类型转换。8.函数默认参数
 默认参数也称为缺省参量,函数定义中的每一个参数都可以拥有一个默认值,如果在函数调用中没有为对应默认值的参量提供实参数据,系统就直接使用默认值。注意只能从右往左设定默认参数。
 默认参数函数调用时,遵循参数调用顺序,自左到右逐个匹配,函数定义:
 void mal(int a, int b=3, int c=5) {…}  //默认参数
 mal(3, 8, 9 );  //不使用默认参数
 mal(3, 5);? //按从左到右顺序调用,相当于mal(3,5,5);
 mal(3);  //按从左到右顺序调用,相当于mal(3,3,5);
 mal( );  //错误,因为a没有默认值
 mal(3, , 9);  //错误,应按从左到右顺序逐个调用
 当函数重载与默认参数同时使用容易出现二义性:
 重载函数定义:
 int max(int a,int b){…}
 int max(int a,int b,int c=5){…}
 调用:max(4,5)?; //二义性错误
 调用两个参数的、还是调用三个参数的,两种情形都符合规则,编译系统无法确定,因此出现二义性错误。因此,默认参数与重载函数尽量不要同时采用。9.数据结构与数据访问
 指针
 指针变量是用来存放地址的,指针变量定义的一般形式为:
 类型说明符  *变量名;
 例如:   int *p1;
 对指针变量的定义包括三个内容:
 指针类型说明符,*表示这是一个指针变量;
 指针变量名,p1为指针变量名;
 指针所指向的变量的数据类型,int为指针变量所指向的变量的数据类型,说明p1只能储存整型变量的地址。
 指针变量使用之前必须赋予具体的值。否则将造成系统混乱,甚至死机。
 指针类型
 指向一维数组的指针:类型说明符 (*指针变量名)[数组长度];
 指针数组:类型说明符 *数组名[数组长度];
 指向指针的指针:类型说明符 **变量名;
 指向函数的指针:类型说明符  (*指针变量名)(参数表);
 引用
 C++引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。
 引用就是某一变量(或目标)的一个别名,对引用的操作与对变量直接操作完全一样。
 引用的声明格式:类型标识符 &引用名=目标变量名;
 int a;
 int &ra=a; //定义引用ra,它是变量a的引用
 常引用
 常引用声明一般形式:const 类型标识符 &引用名=目标变量名;
 用这种方式不能通过引用对目标变量的值进行修改。
 int a ;
 const int &ra=a;
 ra=1;    ×
 a=1;    √
 若函数中不需要改变形参数据的情形,引用型参数应该尽量定义为const类型。如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用,这也符合软件工程的最小权限原则。
 引用作为返回值
 要以引用返回函数值,则函数定义时要按以下格式:
 类型标识符 &函数名(形参列表及类型说明)
 {函数体}
 new运算符
 开辟指定大小的存储空间,并返回该存储区的起始地址。
 new的一般格式:
 类型说明符  *指针变量名 = new  类型说明符;
 类型说明符  *指针变量名 = new  类型说明符[整型表达式];
 例如:
 float *p1=new float;
 //在堆空间中开辟一个float类型空间,并把其地址赋值给p1。
 float *p2=new float[10];
 //在堆空间中开辟10个float类型空间,并把其地址赋值给p2。
 delete运算符
 释放new开辟的存储空间。
 delete的一般格式:
 delete  指针变量名;
 delete [] 指针变量名;
 能够使用delete释放的空间必须由new申请七、习题:
 1.面向对象的(   )是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。
 A.多态性
 B.封装性
 C.继承性
 D.重用性
 答案:B2.C++源文件的扩展名为(   )。
 A.cpp
 B.c
 C.txt
 D.exe
 答案:A3.下面的(   )不是C++所包含的要素。
 A.重载
 B.对象
 C.类
 D.继承
 答案:A4.下面对于类的描述,(   )是错误的。
 A.类是抽象数据类型的实现
 B.类是具有共同行为的若干对象的统一描述体
 C.类是创建对象的模板
 D.类就是C语言中的结构类型
 答案:D5.关于C++和C语言的描述中,(   )是错误的?
 A.C是C++的一个子集
 B.C程序在C++环境可以运行
 C.        C++程序在C环境可以运行
 D.C++是面向对象的而C是面向过程的
 答案:C6.关于封装,下列说法中不正确的是( )。
 A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
 B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
 C.通过封装,每个对象都成为相对独立的实体
 D.通过封装,对象的属性都是不可见的
 答案:D7.C++的合法注释是(   )。
 A./*This is a C program/*
 B.// This is a C program
 C. “This is a C program”
 D./*This is a C program//
 答案:B8.选出错误用法(   )。
 A.const int buffer = 256;
 B.const int temp;
 C.const double *point;
 D.double * const pt = new double(5.5);
 答案:B9.下列关于const限定符的说法中,正确的是(     )。
 A.const限定符是左结合的,即它修饰在它左边的类型;
 B.在说明const变量时,必须对该变量进行初始化;
 C.与宏定义符号常量的区别是,const将产生一个具有类型的符号;
 D.const变量是常量变量,所以一个const变量可以被多次赋予不同的常量;
 答案:B10.下列标识符中,(   )是合法的。
 A.goto
 B.Student
 C.123
 D.k-ld
 答案:B11.在C++语言中,定义标示符时(   )的陈述是正确的。
 A.能使用关键字并区分大小写
 B.能使用关键字并不区分大小写
 C.不能使用关键字并区分大小写
 D.不能使用关键字并不区分大小写
 答案:C12.C++语言中语句的结束符是(   )。
 A. ,
 B. ;
 C. 。
 D. 、
 答案:B13.下列(   )的调用方式是引用调用。
 A.形参和实参都是变量
 B.形参是指针,实参是地址值
 C.形参是引用,实参是变量
 D.形参是变量,实参是地址值
 答案:C14.关于引用,下列的说法中错误的是_______。
 A.引用是给被引用的变量取一个别名;
 B.引用主要是用来作函数的形参和函数的返回值;
 C.在声明引用时,要给它另开辟内存单元;
 D.在声明引用时,必须同时使它初始化;
 答案:C15.采用重载函数的目的是( )。
 A.实现共享
 B.减少空间
 C.提高速度
 D.使用方便,提高可读性
 答案:D16.以下C++中参数默认值正确的描述是( )。
 A.不允许设置参数的默认值
 B.设置参数的默认值只能在定义函数时设置
 C.设置参数的默认值时,应该设置右边的参数
 D.设置参数的默认值时,应该全部参数都设置
 答案:B17.函数重载是指(    )。
 A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
 B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
 C.两个以上的函数名字不同,但形参的个数或类型相同
 D.两个以上的函数取相同的函数名,并且函数的返回类型相同
 答案:A本内容由易百教育整理发布
 网址www.openhelp100.com
 QQ 515224986
 
 | 
 |