实验九 函数的重载和变量的作用域
程序设计基础课程教学大纲
程序设计基础课程教学大纲(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《信息技术基础》(VB)实验教学大纲制定:审核:第一部分教学大纲说明一、课程性质、目的与任务《程序设计基础》是一门实践性很强的课程,主要内容包括Visual Basic的基本概念、Visual Basic的界面设计、Visual Basic语言基础、Visual Basic的基本语句、过程设计、文件操作、图形及多媒体处理、数据库操作等。
根据培养应用型人才的需要,本课程的目的与任务是使学生通过本课程的学习,了解开发Visual Basic应用程序的一般过程,建立程序设计的基本概念,编写简单应用程序,为今后专业学习中使用计算机打下良好的基础。
二、先修课要求大学计算机基础三、课程的教学要求基本概念和基本知识:面向对象程序设计(OOP),Visual Basic的集成开发环境(IDE),界面设计,Visual Basic语言基础,基本语句结构,过程,文件,数据库应用。
基本技能:算法实现、程序重点:常用控件的使用、三种基本结构、过程难点:程序算法、递归过程四、课程的教学方法和教学形式建议学生自主实验+教师指导第二部分教学过程建议一、课程教学总学时数、学分数课程教学总学时数为72学时,其中理论授课时间为36学时,上机实验为36学时。
二、实验学时分配第三部分实践教学环节《Visual Basic程序设计》是一门实践性很强的课程,实践教学是教学过程中必不可少的环节。
通过计算机实验和程序调试,使学生加深理解、验证巩固课堂教学内容;增强对程序调试的感性认识;掌握程序设计的基本方法;培养学生理论与实践相结合的能力。
一、课程实验为了进一步强化和巩固课堂所学的知识及实际的应用,配合课堂教学,设置以下课程实验:实验一 VB集成环境与应用程序创建初步(课前指导)【实验目的】1.了解VB集成开发环境的基本组成2.了解VB应用程序的创建及开发环境的选项设置3.掌握VB联机帮助的使用4.掌握VB集成开发环境的退出【实验内容】一、VB集成开发环境的基本组成1.启动VB并创建标准EXE工程2.熟悉VB集成开发环境3.熟悉窗体设计器窗口4.熟悉代码窗口5.熟悉VB集成开发环境的其他组成部分二、VB应用程序的创建及开发环境的选项设置1.设计应用程序的界面2.设计界面对象的属性3.编写程序代码4.执行并调试程序5.生成可执行程序文件三、VB联机帮助的使用四、退出VB集成开发环境实验一 VB应用程序的创建及编程基础【实验目的】1.学会创建一个简单的VB应用程序2.掌握VB的数据类型、常量、变量、运算符和表达式3.了解过程与函数的使用【实验内容】一、建一个简单的VB应用程序1.启动VB,创建一个标准EXE类型的VB应用程序2.设计应用程序的界面3.设计界面对象的属性4.编写程序代码5.保存工程6.执行并调试程序7.生成可执行程序文件二、VB的数据类型、常量、变量、运算符和表达式三、过程与函数的使用实验二 VB语言基础(一)【实验目的】1.掌握各种数据类型2.掌握常量与变量【实验内容】一、各种数据类型的定义与使用二、变量的定义实验三 VB语言基础(二)【实验目的】1、掌握表达式与运算符2、掌握VB常用的内部函数【实验内容】一、各种数据类型表达式与其运算符二、VB常用的内部函数的实验测试实验四 VB基本语句的使用(一)【实验目的】1、掌握顺序结构语句的使用【实验内容】一、顺序结构语句的使用实验五 VB基本语句的使用(二)【实验目的】1、掌握选择语句的使用【实验内容】一、选择语句实验六 VB基本语句的使用(三)【实验目的】1、掌握循环语句的使用【实验内容】一、循环语句实验七数组【实验目的】1、掌握数据的定义2、掌握不同类型的数据的区别3、了解控件数组的定义方法【实验内容】1、学会数组的定义2、掌握不同类型的数组的区别3、了解控件数组的定义方法实验八过程【实验目的】1.掌握通用子程序的定义和调用方法2.掌握函数过程的定义和调用方法3.明确子过程和函数过程的特点及区别【实验内容】一、Sub过程的定义和调用二、Function过程的定义和调用实验九递归调用、参数传递和变量作用域【实验目的】1.明确递归过程的编制特点,掌握通用过程的递归调用方法2.掌握实参和形参按值传递和按地址传递的不同用法,明确不同实参数据类型具有的不同传递形式3.明确过程级、窗体级和模块级变量的作用域和特点,能够根据具体情况使用全局变量、共用变量和局部变量4.掌握Sub函数调用时的两种格式:语句格式和命令格式【实验内容】一、递归过程二、参数传递实验十窗体和标准控件(一)【实验目的】1.掌握命令按钮、标签及文本框控件的使用方法2.掌握复选框、单选按钮及框架控件的使用方法【实验内容】一、命令按钮、标签及文本框控件的使用二、复选框、单选按钮及框架控件的使用实验十一窗体和标准控件(二)【实验目的】1.握列表框组合框控件的使用方法2.握滚动条和定时器控件的使用方法【实验内容】一、表框组合框控件的使用二、滚动条和定时器控件的使用实验十二窗体和标准控件(三)【实验目的】控件内容的综合与复习【实验内容】一、各种不同控件的使用综合实验十三对话框与菜单的设计【实验目的】1、掌握不同对话框的使用2、掌握下拉式菜单的设计方法3、掌握弹出式菜单的设计方法【实验内容】一、下拉式菜单的设计二、弹出式菜单的设计3、三、掌握不同对话框的使用实验十四文件的基本操作【实验目的】1.掌握DriveListBox、DirListBox和FileListBox控件的使用方法2.掌握文本文件的读写操作方法3.掌握随机文件的读写操作方法4.掌握二进制文件的读写操作方法【实验内容】一、DriveListBox、DirListBox和FileListBox控件的使用二、文本文件的读写三、随机文件的读取四、二进制文件的读取实验十五制作图形【实验目的】1.掌握VB提供的形状(Shape)控件和图像(Image)控件的使用方法2.掌握坐标和颜色的设置方法3.掌握常用的绘图方法4.能编制简单的动画程序【实验内容】一、形状(Shape)控件二、图像控件三、各种图形方法实验十六、十七数据库【实验目的】1.理解数据库的结构和表的结构2.掌握在VB环境中建立Access数据库和在数据库中添加表的方法通用子程序的定义和调用方法4.掌握数据控件(Data)的基本属性设置和使用方法5.掌握常用数据显示控件与Data控件的绑定方法6.熟悉SQL语言中常用语句的语法规则和使用方法7.了解直接运用Access创建数据库的方法8.能编制简单的数据库操作程序【实验内容】一、数据管理器二、数据控件三、结构化查询语言SQL四、数据窗体向导。
c++函数重载、new和delete的用法 实训总结
c++函数重载、new和delete的
用法实训总结
C++中的函数重载(Overloading),new和delete操作符在编程中非
常常用,这些功能能帮助我们写出更加灵活和高效的代码。
函数重载(Overloading):
函数重载是指在同一作用域内,可以有一组具有相同名字但是参数列
表不同的函数。
这使得我们可以使用相同的函数名来完成不同的操作,提高了代码的可读性和便捷性。
例如:
cpp
void print(int i) {
cout << "Integer: " << i << endl;
}
void print(double d) {
cout << "Double: " << d << endl;
}
在上面的例子中,两个函数都叫print,但是它们的参数列表不同(一个接受int,一个接受double),因此编译器能够正确区分它们。
new和delete操作符:
new和delete是C++中用于动态内存分配和释放的操作符。
使用new 可以在堆上分配内存,而使用delete可以释放这些内存。
例如:
cpp
int p = new int(10); // 分配一个int大小的内存,并将其初始化为10
delete p; // 释放p指向的内存
需要注意的是,使用new分配的内存必须使用delete来释放,如果忘记释放,可能会导致内存泄漏。
此外,也可以使用delete[]来释放一个数组。
实训总结:。
第5讲 函数重载和变量的作用域
例 5-6 #include<iostream.h> int i=1; // i 为全局变量,具有静态生存期。 void main(void) { static int a; // 静态局部变量,有全局寿命,局部可见。 int b=-10; // b, c为局部变量,具有动态生存期。 int c=0; void other(void); cout<<"---MAIN---\n"; cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; c=c+8; other( ); cout<<"---MAIN---\n"; cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; i=i+10; other( ); }
float add(float a,float b) { cout<< ″In float add(float a,float b) ″<<endl; cout<<a<<′+′<<b<<′=′; return a+b; } double add(double a,double b) { cout<< ″In double add(double a,double b) ″<<endl; cout<<a<<′+′<<b<<′=′; return a+b; } 注 不要将不同功能的函数声明为重载函数,以免出现调用 结果的误解、混淆。这样不好: 当重载的函数带有默认参数时,应该注意避免二义性。
《C语言程序设计》实验报告
(此文档为word格式,下载后您可任意编辑修改!)《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++6.0一、实验目的:1.了解在Visual C++6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:教材《C语言程序设计教程》第1章。
三、实验内容:1.在Visual C++6.0环境下输入并运行下面的程序:#include<stdio.(){printf("This is a C program.\n");return0;}2.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。
#include<stdio.(){int a,b,suma=3;b=4;sun=a+b;print("%d+%d=%d\n",a,b,sum);return0;}四、实验结果:1.运行结果(或截图):2.(1)改正后的源程序:(2)运行结果(或截图):五、思考题:1.一个C程序上机的步骤有哪些?答:2.组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3.掌握基本算术运算符及其表达式的使用方法;4.掌握++、--运算符、赋值运算符及其表达式的使用方法。
二、预习内容:教材《C语言程序设计教程》第2章。
三、实验内容:1.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误。
#include<stdio.(){int2cd=3;floatπ=3.14;char for=′A′;printf("%d,%f,%c\n",2cd,π,for);return0;}2.在Visual C++6.0环境下输入并运行下面的程序,观察分析运行结果。
【C++】C++函数重载的总结
【C++】C++函数重载的总结函数重载: 出现在相同作⽤域中的两个函数,如果具有相同的名字⽽形参表不同,则称为重载函数(overloaded function)。
⼀定要注意函数重载的两个关键词:形参列表和作⽤域。
任何程序有且仅有⼀个main函数的实例,main函数不能重载。
对于函数重载来说,它们应该在形参数量和形参类型上有所不同。
下⾯论述形参列表和作⽤域对函数重载的影响。
函数重载与形参列表 函数重载和函数声明的区别: 如果两个函数声明的返回类型和形参表完全匹配,则将第⼆个声明视为第⼀个的重复声明。
如果两个函数的形参列表相同(参数个数和类型)相同但是返回类型不同,那么第⼆个函数的声明将会出现编译错误。
函数不能仅仅基于不同的返回类型⽽实现重载。
基于const形参的重载: 当参数是⾮引⽤形参时,形参与const形参的两个同名函数不能构成函数重载。
下⾯的第⼆个函数只是第⼀个函数的重复声明。
1 A func(B);2 A func(const B); // 重复声明 仅当形参是引⽤或指针是,形参是否为const才有影响。
A func(B&);A func(const B&) //基于const引⽤形参的重载A func(B*);A func(const B*); //基于const指针形参的重载可基于函数的引⽤形参是指向const对象还是指向⾮const对象,实现函数重载。
将引⽤形参定义为const来重载函数是合法的,因为编译器可以根据实参是否为const确定调⽤哪⼀个函数。
如果实参为const对象,那么将调⽤const引⽤形参的版本。
如果实参为⾮const对象,⾮const对象既可以⽤于初始化const引⽤,也可以⽤于初始化⾮const引⽤。
但是将const引⽤初始化为⾮const对象,需要转换,因为⾮const形参的初始化则是精确匹配。
对于指针形参也是如出⼀辙。
如果实参是const对象,则调⽤带有const*类型形参的函数。
函数的重载。
函数的重载。
函数是一种特殊的语言结构,它用来封装特定的功能并在需要时调用。
函数的重载是指在一个程序中使用同一个函数名,但其参数类型或数量不同。
本文将围绕函数的重载展开,深入探讨其定义、重载规则以及应用。
一、函数的重载定义函数的重载是一种多态性,它使得同一个函数名可以被用于不同类型或数量的参数。
它让程序员在编写程序时更加灵活,可以根据需求而不同。
二、函数的重载规则1. 函数名称必须相同。
2. 参数类型、数量或顺序必须不同。
3. 重载函数可以有不同的返回类型。
4. 函数重载不能仅仅依靠返回类型的不同来实现,因为编译器将无法分辨该调用哪一个函数。
5. 重载函数可以位于同一个类中或者不同的类中。
6. 重载函数也可以跨越多个命名空间。
7. C++中的函数重载仅根据函数签名(函数名称和参数列表)来区分,与返回类型无关。
8. 调用重载函数时,编译器会根据传递给函数的参数的数量,类型或顺序来确定要调用的函数。
三、函数的重载应用1. 算法函数在实现某一个算法时,不同的数据类型需要进行不同的操作,这时候可以采用函数重载的方式来处理。
2. 构造函数在一个类中如果有多个构造函数,可以通过函数重载的方式来创建多个构造函数,以满足对象创建时不同的需求。
3. 运算符重载类中的操作符可以使用函数重载来实现。
例如,可以实现不同的数据类型之间的算术操作。
4. 实现多态在面向对象编程中,多态性是一个重要的概念。
函数重载可以实现多态性,使得程序员能够更加灵活地处理数据。
总之,函数的重载是C++语言中非常重要的一项特性,它使得程序员能够编写更加灵活的程序。
正确地使用函数重载可以大大提高程序的可读性和可维护性,降低开发成本。
在实际的编程中,我们需要充分利用这一特性,以达到更好的编程效果。
函数的重载和重写
函数的重载和重写在编写程序时,函数是重要的组成部分之一。
函数可以让代码更具有可读性和可维护性,同时也可以提高代码的复用性。
函数的重载和重写是函数的两种常见形式,本文将对这两种形式进行详细介绍。
函数的重载(Function Overloading)函数的重载是指在同一个作用域内,定义多个同名函数,但是这些函数的参数类型、参数个数或者参数顺序不同。
编译器会根据函数调用时传入的参数类型、个数和顺序来自动选择正确的函数。
函数的重载可以让我们在不改变函数名的前提下,提供更多的函数功能。
例如,我们可以定义一个add函数来实现两个整数相加的功能,同时也可以定义一个add函数来实现两个浮点数相加的功能,这就是函数的重载。
下面是一个简单的add函数的重载示例:```int add(int a, int b) {return a + b;}float add(float a, float b) {return a + b;}```在上面的例子中,我们定义了两个同名的add函数,一个是用于整数相加,一个是用于浮点数相加。
当我们调用add函数时,编译器会自动选择正确的函数来执行。
函数的重写(Function Overriding)函数的重写是指在派生类中重新定义基类中已经定义的函数。
在派生类中重新定义的函数和基类中的函数具有相同的名称和参数列表,但是派生类中的函数实现可以与基类中的函数实现不同。
函数的重写是面向对象编程中的重要概念之一。
通过函数的重写,我们可以实现多态性,即在运行时根据对象的实际类型来调用相应的函数。
下面是一个简单的函数重写的示例:```class Animal {public:virtual void move() {cout << "Animal is moving" << endl;}};class Dog : public Animal {public:void move() {cout << "Dog is running" << endl;}};int main() {Animal* animal = new Dog();animal->move();return 0;}```在上面的例子中,我们定义了一个Animal类和一个Dog类,Dog 类是从Animal类派生而来的。
变量与函数知识点总结
变量与函数知识点总结在计算机编程领域中,变量和函数是两个十分基础且重要的概念。
本文将对变量与函数的相关知识点进行总结,帮助读者更好地理解和应用它们。
一、变量变量是一种存储数据的容器。
在编程中,我们可以通过定义变量来存储各种类型的数据,如整数、浮点数、字符等。
以下是变量的相关知识点:1. 变量定义与命名变量的定义需要指定变量名和类型。
变量名是由字母、数字和下划线组成的字符串,不能以数字开头,且要遵循命名规范。
命名规范一般要求变量名具有描述性,能清晰表达变量的含义。
2. 变量的赋值与修改通过赋值操作,可以将某个值存储到变量中。
例如:int age = 25;这行代码将整数25赋值给名为age的变量。
变量的值可以随时修改,只需要通过赋值操作重新赋予新的值。
3. 变量的作用域变量的作用域指的是变量的可访问范围。
在不同的代码块中定义的变量拥有不同的作用域。
全局变量在整个程序中可见,而局部变量只在定义它们的代码块内可见。
4. 变量的数据类型常见的数据类型包括整型、浮点型、字符型等。
数据类型决定了变量能够存储的数据范围和操作方式。
不同编程语言可能支持的数据类型有所差异,需要根据具体语言的规范来选择适合的数据类型。
二、函数函数是一段可重复调用的代码块,用于完成特定的任务。
通过定义函数,可以提高代码的可读性和可维护性。
以下是关于函数的相关知识点:1. 函数的定义与调用函数定义包括函数名、参数列表和函数体。
函数名用于标识函数,参数列表指定函数接收的输入,函数体包含具体的代码实现。
函数的调用通过函数名和参数完成。
2. 函数的返回值函数通常可以返回一个结果,在函数体中使用return语句返回特定的值。
函数的返回类型需要在函数定义时指定。
3. 函数的参数传递函数可以接收多个参数,参数可以是不同的类型。
参数传递可以按值传递,也可以按引用传递。
按值传递是传递参数的副本,而按引用传递直接传递参数的地址。
4. 函数的递归递归是指函数可以直接或间接地调用自身。
VB实验报告1-9
实验一:设计简单的VB 应用程序一、实验目的1.掌握Visual Basic 启动和退出的方法。
2.熟悉Visual Basic 的集成开发环境。
3.掌握Visual Basic 程序设计的基本步骤,了解VB 程序的编写、保存和编译的方法过程。
4.初步了解几个常用基本控件控件(标签、命令按钮和文本框)的使用方法。
二、实验类型综合三、实验时间:2013-3-8四、实验任务1、启动Visual Basic ,然后创建一个“标准 EXE ”工程(保存在D 盘以自己学号命名的文件夹中,文件名和窗体名均为SJT ),并了解Visual Basic 集成开发环境下各组成部分及其作用。
2、编一程序,计算任意输入的正整数的平方根。
3、编写一个应用程序,界面如图1-1所示。
窗体中文字“VB 应用程序!”为一标签控件,单击标题为“放大”的命令按钮,则“VB 应用程序!”的字号放大一号,单击“缩小”按钮则反之;同时,窗体中还有4个含某种指向图案的按钮,若单击某个按钮,则使“VB 应用程序!”向该按钮所指向的方向移动50Twip 。
(提示:四种指向的图案可以在Visual Basic 安装目录中的“…graphics\icon\Arrows ”子目录中找到,名称分别为arw07dn.ico 、arw07lt.ico 、arw07rt.ico 和arw07up.ico )五、实验要求 写出实验报告,内容是:1、第1小题的操作步骤2、第2、3题1).程序的界面设计。
2).程序主要代码。
3).运行结果(输入与输出)。
4).实验总结。
(写上你自己的总结。
可以从以下几个方面来总结:你在编程过程中花时多少?时间是怎么分配的?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?)图1-1 实验1-2程序运行实验二:数据的输入和输出一、实验目的1.掌握常量和变量、表达式的基本概念和正确书写格式。
2.掌握基本语句(Print语句、赋值语句、Dim语句等)的使用;3、掌握常用函数的正确使用方法;4、掌握数据的动态输入InputBox和信息提示MsgBox的基本使用方法。
函数的重载和变量的作用域
C++语言实验报告实验名称:函数的重载和变量的作用域实验日期:2011-5-6 实验预习报告日期:2011-5-6 实验目的1、了解内联函数、重载函数、带默认参数函数的定义及使用方法。
2、掌握作用域的概念、变量的存储类型及它们之间的差别。
3、掌握程序的多文件组织。
二、实验内容预习及准备(1)分析和设计(编程思路,关键公式、步骤或算法)实验一、重载函数允许不同的函数使用相同的名字,这使得完成类似的任务时可以使用相同的函数名。
范例:编写几个计算面积的函数,分别计算圆、矩形、梯形和三角形的面积,计算边长为1的正方形及其内切圆、内接等腰三角形和等腰梯形面积。
实验源码#include<iostream> #include<cmath> using namespace std; const double PI=3.14159; double area(double radius=0); double area(double a,double b); double area(double a,double b,double h); double area(double a,double b,double c,int); int main(){cout<<"Area of point is:"<<area()<<endl; cout<<"Area of square is:"<<area(1,1)<<endl; cout<<"Area of circle is:"<<area(0.5)<<endl; cout<<"Area of trapezium is:"<<area(1,0.5,1)<<endl; cout<<"Area of triangle is:"<<area(1,sqrt(1+0.5*0.5),sqrt(1+0.5*0.5),0)<<endl; return 0; } double area(double radius){ return PI*radius*radius; } double area(double a,double b){ return a*b; } double area(double a,double b,double h){ return (0.5*(a+b)*h); } double area(double a,double b,double c,int){ double s=0.5*(a+b+c); return sqrt(s*(s-a)*(s-b)*(s-c)); } 实验过程记录实验要求1、若将计算矩形面积的函数原型改为double area(double a=0, double b=0);重新编译运行情况会怎样?为什么?编译错误,无法执行2、若将计算三角形面积的函数原型改为double area(double a, double b,double c);程序还能正确运行吗?为什么?不能,输出流对象输出的函数与定义函数不对应3、若将计算三角形面积的函数原型改为double area(double a, double b,double c=0,int); 程序还能正确运行吗?为什么?不能,输出流对象输出的函数与定义函数不对应实验二、编程:将上题以多文件方式组织,在area.h 中声明各个area( )函数原型,在area.cpp 中定义函数,然后在Exp9_2.cpp 中包含area.h,并定义main( )函数并执行。
c++中的函数重载、函数重写、函数重定义
c++中的函数重载、函数重写、函数重定义⽬录为了更加深刻的理解函数重载、重写、重定义,我们可以带着如下这两个问题去思考:1、⼦类中是否可以定义⽗类中的同名成员?为什么? 可以,因为⼦类与⽗类的命名空间不同;2、⼦类中定义的函数是否可以重载⽗类中的同名函数? 不可以,因为函数重载必须在同⼀个作⽤域中。
⼀、函数重载(Function Overloading) 1、什么是函数重载 在同⼀个类中(同⼀个作⽤域中/在类的内部),存在⼀组函数名相同,函数的参数列表不同(参数的个数、类型、顺序),函数有⽆ virtual 关键字都可以,我们把这组函数称为函数重载。
2、为什么使⽤函数重载(函数重载的好处) 由于函数重载可以在同⼀个作⽤域内,使⽤同⼀个函数名命名⼀组功能相似的函数,这样做减少了函数名的数量,避免了程序员因给函数名命名所带来的烦恼,从⽽提⾼程序的开发的效率。
3、函数重载的条件 1. 必须在同⼀作⽤域下 2. 函数名相同但是参数列表不同(参数列表的类型 or 个数 or 顺序不同) 3. 返回值的类型不会影响重载 4. const属性相同4、函数重载的原理(本质:c++编译器对同名函数进⾏重命名) 编译器在编译.cpp⽂件中当前使⽤的作⽤域⾥的同名函数时,根据函数形参的类型和顺序会对函数进⾏重命名(不同的编译器在编译时对函数的重命名标准不⼀样); 但是总的来说,他们都把⽂件中的同⼀个函数名进⾏了重命名;在vs编译器中: 根据返回值类型(不起决定性作⽤)+形参类型和顺序(起决定性作⽤)的规则重命名并记录在map⽂件中。
在linux g++ 编译器中: 根据函数名字的字符数+形参类型和顺序的规则重命名记录在符号表中;从⽽产⽣不同的函数名,当外⾯的函数被调⽤时,便是根据这个记录的结果去寻找符合要求的函数名,进⾏调⽤; 为什么c语⾔不能实现函数重载? 编译器在编译.c⽂件时,只会给函数进⾏简单的重命名; 具体的⽅法是给函数名之前加上”_”;所以加⼊两个函数名相同的函数在编译之后的函数名也照样相同;调⽤者会因为不知道到底调⽤那个⽽出错;1 #include<stdio.h>23int Add(int a, int b)4 {5return a + b;6 }789float Add(float a, float b)10 {11return a + b;12 }1314void testFunc()15 {16 Add(10, 20);17 Add(20.0f, 30.0f);18 }1920int main(int argc, char *argv[])21 {22 testFunc();2325 }案例分析1. 将上述代码保存到.c⽂件中 若上述代码⽤c编译器编译,由于c语⾔中⽆函数重载,所以,在程序运⾏时出错。
函数的重载和重写有什么使用技巧
函数的重载和重写有什么使用技巧在编程的世界里,函数的重载和重写是两个非常重要的概念。
它们能够让我们的代码更加灵活、高效和易于维护。
那么,这两者到底有什么使用技巧呢?让我们一起来深入探讨一下。
首先,我们来了解一下函数重载。
函数重载是指在同一个作用域内,可以有多个函数名相同但参数列表不同的函数。
这里的参数列表不同,可以是参数的个数不同,参数的类型不同,或者参数的顺序不同。
函数重载的一个重要使用技巧是提高代码的可读性和可维护性。
想象一下,如果我们有一个计算两个数相加的函数,可能会有整数相加、浮点数相加、复数相加等不同的情况。
如果不使用函数重载,我们可能需要给这些不同类型的相加操作取不同的函数名,比如`add_int`、`add_float`、`add_complex` 等。
这样不仅函数名冗长,而且在使用的时候也容易混淆。
而使用函数重载,我们只需要一个简洁的函数名`add` ,根据传入的参数类型,编译器会自动选择合适的重载函数进行调用。
另一个使用技巧是增强代码的灵活性。
比如说,我们有一个函数用于打印输出信息,可能需要打印整数、字符串、数组等不同类型的数据。
通过函数重载,我们可以为每种类型提供一个专门的打印函数,而调用者只需要使用相同的函数名`print` ,就可以方便地打印各种类型的数据,而不需要关心具体的实现细节。
函数重载还可以用于实现类似功能的不同操作。
比如,一个绘图函数`draw` ,可以重载为接受不同的图形参数,如圆形、矩形、三角形等,这样可以使代码更加简洁和直观。
接下来,我们再看看函数重写。
函数重写是指子类中有一个与父类同名、同参数列表、同返回类型的函数,子类中的这个函数覆盖了父类中的同名函数。
函数重写的一个关键使用技巧是实现多态性。
多态性是面向对象编程中的一个重要特性,它允许通过父类的引用或指针来调用子类的重写函数,从而实现不同的行为。
例如,我们有一个父类`Shape` ,其中有一个计算面积的函数`area` ,然后有子类`Circle`(圆形)和`Rectangle`(矩形)分别重写了这个函数来计算各自的面积。
函数重载的实验报告
一、实验目的1. 理解函数重载的概念和作用。
2. 掌握C++中函数重载的实现方法。
3. 通过实验加深对函数重载的理解和应用。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验内容1. 理解函数重载的概念函数重载是指在同一作用域内,允许存在多个同名函数,但这些函数的参数列表不同。
当调用函数时,编译器会根据参数列表的差异自动选择合适的函数进行调用。
2. 实现函数重载(1)编写一个简单的程序,演示函数重载的应用。
```cpp#include <iostream>using namespace std;// 函数重载:计算两个整数的和int add(int a, int b) {return a + b;}// 函数重载:计算两个浮点数的和double add(double a, double b) {return a + b;int main() {int sum1 = add(3, 5);double sum2 = add(3.2, 4.8);cout << "整数和:" << sum1 << endl; cout << "浮点数和:" << sum2 << endl; return 0;}```(2)编写一个类,演示成员函数的重载。
```cpp#include <iostream>using namespace std;class Calculator {public:// 成员函数重载:计算两个整数的和int add(int a, int b) {return a + b;}// 成员函数重载:计算两个浮点数的和 double add(double a, double b) {return a + b;}int main() {Calculator calc;int sum1 = calc.add(3, 5);double sum2 = calc.add(3.2, 4.8);cout << "整数和:" << sum1 << endl;cout << "浮点数和:" << sum2 << endl;return 0;}```3. 函数重载的条件(1)函数名相同。
实验九 函数的重载和变量的作用域
实验九函数的重载和变量的作用域一、实验目的1、了解内联函数、重载函数、带默认参数函数的定义及使用方法。
2、掌握作用域的概念、变量的存储类型及它们之间的差别。
3、掌握程序的多文件组织。
二、实验内容1、重载函数允许不同的函数使用相同的名字,这使得完成类似的任务时可以使用相同的函数名。
范例:编写几个计算面积的函数,分别计算圆、矩形、梯形和三角形的面积,计算边长为1的正方形及其内切圆、内接等腰三角形和等腰梯形面积。
函数原型如下: double area(double radius=0);//圆面积,参数为半径,默认参数为0,表示点面积 double area(double a, double b);// 计算矩形面积,参数为长和宽 double area(double a, double b, double h);//计算梯形面积,参数为两底和高 double area(double a, double b, double c, int);//计算三角形面积,参数为三边长,int 型参数起标示作用,以区别于梯形,不参加计算。
#include<iostream>#include<cmath>using namespace std;const double PI=3.14159;double area(double radius=0);double area(double a,double b);double area(double a,double b,double h);double area(double a,double b,double c,int);int main(){cout<<"Area of point is"<<area()<<'\t';cout<<"Area of square is"<<area(1,1)<<'\n';cout<<"Area of circle is"<<area(0.5)<<'\n';cout<<"Area of trapezium is"<<area(1,0.5,1)<<'\n';cout<<"Area of triangle is"<<area(1,sqrt(1+0.5*0.5),sqrt(1+0.5));return 0;}double area(double radius){return PI*radius*radius;}double area(double a,double b){return a*b;}double area(double a,double b,double h){return (0.5*(a+b)*h);}double area(double a,double b,double c,int){double s=0.5*(a+b+c);return sqrt(s*(s-a)*(s-b)*(s-c));}(1)编译运行程序,并记录运行结果,注意函数调用时,实参与形参之间的关系(包括类型、个数)。
C++基础学习之函数重载的简单介绍
C++基础学习之函数重载的简单介绍前⾔我们在平时写代码中会⽤到⼏个函数但是他们的实现功能相同,但是有些细节却不同。
例如:交换两个数的值其中包括(int, float,char,double)这些个类型。
在C语⾔中我们是利⽤不同的函数名来加以区分。
void Swap1(int* a, int* b);void Swap2(float* a, float* b);void Swap3(char* a, char* b);void Swap4(double* a, double* b);我们可以看出这样的代码不美观⽽且给程序猿也带来了很多的不便。
于是在C++中⼈们提出了⽤⼀个函数名定义多个函数,也就是所谓的函数重载。
函数重载指的是⼀个作⽤域内的⼏个函数名字相同但是形参列表不同。
这些函数执⾏操作类似,但是接受的形参类型不⼀样,编译器会根据传递的实参类型选择对应的函数调⽤。
本⽂将简单介绍C++中的函数重载。
定义重载函数假设有⼀个计算图形⾯积的函数,它可以是计算三⾓形,圆形或正⽅形的⾯积。
函数的名字都相同,只是根据传⼊的图形类型来选择不同的函数来计算⾯积,程序清单如下:#include <iostream>using namespace std;typedef struct Triangle//定义三⾓形结构{double high;//⾼double baseLen;//底边长}Triangle;typedef struct Circle //定义圆形结构{double radius;//半径}Circle;typedef struct Square//定义正⽅形结构{double sideLen;//边长}Square;//函数1.计算三⾓形⾯积double calcArea(const Triangle&){cout<<"calcute triangle area"<<endl;}//函数2.计算圆形⾯积double calcArea(const Circle&){cout<<"calcute circle area"<<endl;return 0;}//函数3,计算三⾓形⾯积double calcArea(const Square&){cout<<"calcute square area"<<endl;}int main(void){Triangle triangle;Circle circle;Square square;calcArea(triangle);//调⽤函数1calcArea(circle);//调⽤函数2calcArea(square);//调⽤函数3return 0;}可以看到,定义的三个函数名calcArea都相同,只是形参类型不同。
函数的重载的三个条件
函数的重载的三个条件函数的重载是指在同一个作用域内,函数名相同但参数列表不同的情况下,实现函数的多态性。
函数的重载需要满足三个条件,即函数名相同、参数列表不同、返回值类型可以相同也可以不同。
函数名相同是函数重载的基本条件之一。
在C++中,可以通过定义不同的函数名来实现函数的重载,但这样会使代码的可读性降低,不利于后续的代码维护和调试。
因此,推荐使用相同的函数名来实现函数的重载,这样可以简化代码并提高代码的可读性。
函数的参数列表需要不同。
函数的参数列表包括参数的个数、参数的类型和参数的顺序。
只有当函数的参数列表不同,编译器才能根据参数的不同选择正确的函数进行调用。
例如,在数学中,可以定义一个函数用于计算两个整数之和,也可以定义一个函数用于计算两个浮点数之和,这样就实现了函数的重载。
函数的返回值类型可以相同也可以不同。
在函数重载中,函数的返回值类型并不是判断函数是否重载的条件之一,只有函数名和参数列表相同才能算作函数的重载。
但是,为了提高代码的可读性和可维护性,建议在函数重载中,函数的返回值类型保持一致,这样可以使调用函数的代码更加清晰和简洁。
函数的重载可以使程序更加灵活和易于使用。
通过函数的重载,可以根据参数的不同选择合适的函数进行调用,而不需要为不同的参数定义不同的函数名。
这样可以减少代码的重复性,提高代码的复用性,并且使程序更加清晰和易于理解。
函数的重载还可以提高程序的效率。
通过函数的重载,可以避免在不同的场景下重复定义相似功能的函数,从而减少了代码的冗余和代码的体积。
这样可以减少程序的内存占用和加载时间,提高程序的执行效率。
总结来说,函数的重载是指在同一个作用域内,函数名相同但参数列表不同的情况下,实现函数的多态性。
函数的重载需要满足函数名相同、参数列表不同、返回值类型可以相同也可以不同这三个条件。
函数的重载可以使程序更加灵活和易于使用,提高程序的效率。
因此,在编写代码时,我们可以根据不同的需求和场景来灵活应用函数的重载,从而提高代码的可读性、可维护性和执行效率。
第9讲 函数调用和变量的作用域
说明: 全局变量x的作 用范围包括所有函数。
例
写出下列程序的运行结果。
#include <stdio.h> int m=5 ; int fun( int x, int y ) { int m; m=10 ; return (x*y-m ) ; } void main( ) { int a=7, b=5, c; c=fun(a,b)/m; printf("c=%d\n",c) ; }
例
写出下列程序的运行结果。
#include <stdio.h> void func( ) { int x,y; x=10; y=100;} void main() { int x,y; x=5; y=50; func(); printf("x=%d,y=%d\n",x,y); }
执行结果为:
x=5, y=50
结论:不同函数内的局部变量互不相干。
例
写出下列程序的运行结果。
#include <stdio.h> void f2(int x,int y) { x++; y++;} void f1(int x,int y) { int n=0; f2(x, y); printf("n=%d,x=%d,y=%d\n",n,x,y); } void main() { int n=2,a=3,b=4; f1(a,b); printf("n=%d,a=%d,b=%d\n",n,a,b) ; }
}
二、 函数的递归调用 ( P80 )
概念:
在调用一个函数的过程中又出现直接或间接地 调用该函数本身。这样的调用称为递归调用。 注意:
函数重载的要求
函数重载的要求函数重载是C++语言中的一个重要特性,它允许在同一作用域内定义多个同名函数,但是这些函数的参数列表必须不同。
这样做的好处是可以让程序员在使用函数时更加方便和灵活,同时还能提高代码的可读性和可维护性。
下面将从函数重载的定义、要求和应用等方面来详细介绍。
一、函数重载的定义函数重载是指在同一作用域内定义多个同名函数的机制,这些同名函数的参数列表必须不同。
函数的参数列表包括参数的类型、参数的个数和参数的顺序。
在函数调用时,编译器会根据参数的类型和个数来选择调用哪个同名函数。
二、函数重载的要求函数重载要求同名函数的参数列表必须不同,但是不同的参数列表可以有如下几种情况:1. 参数个数不同例如,下面的两个函数就是参数个数不同的函数:void fun(int a);void fun(int a, int b);2. 参数类型不同例如,下面的两个函数就是参数类型不同的函数:void fun(int a);void fun(double a);3. 参数顺序不同例如,下面的两个函数就是参数顺序不同的函数:void fun(int a, double b);void fun(double b, int a);需要注意的是,函数重载只与参数列表有关,与函数的返回值类型无关。
因此,下面的两个函数是不能构成函数重载关系的:int fun(int a);double fun(int a);三、函数重载的应用1. 实现不同类型的参数传递函数重载可以用于实现不同类型的参数传递。
例如,下面的函数就是用于接收不同类型参数的函数:void fun(int a);void fun(double a);void fun(char a);当调用fun函数时,编译器会根据参数的类型来选择调用哪个同名函数。
2. 实现不同的功能函数重载还可以用于实现不同的功能。
例如,下面的函数就是用于实现不同功能的函数:void fun(int a);void fun(int a, int b);void fun(int a, int b, int c);当只需要传递一个参数时,调用fun(int a)函数;当需要传递两个参数时,调用fun(int a, int b)函数;当需要传递三个参数时,调用fun(int a, int b, int c)函数。
详解C++之函数重载
详解C++之函数重载函数重载本质c++中通过函数名和函数确定⼀个函数所以相同的函数名,不同参数也是可以的不同于c语⾔,c语⾔没有函数重载,函数的本质地址就是函数名函数重载发⽣在同⼀个作⽤域内类中的重载构造函数重载普通成员函数重载静态成员函数重载全局函数、静态成员函数、普通成员函数可以发⽣重载吗?本质就是函数名和函数参数不同,并且发⽣在同⼀个作⽤域静态函数和普通成员函数是可以的全局函数作⽤域在全局作⽤域,所以不可以问题1:当⽗类的成员函数和⼦类的成员函数相等,会发⽣重载吗?本质还是上⾯说的,因为⽗类和⼦类的作⽤域不在同⼀个看⼀段代码#include <iostream>class father{public:father() {std::cout << "father()" << std::endl;}void print() {std::cout << "father print" << std::endl;}};class child : public father{public:child() {std::cout << "child()" << std::endl;}void print(int a) {std::cout << "child print = " << a << std::endl;}};int main(){father* father_test = new father();father_test->print(); //打印father printchild* child_test2 = new child();child_test2->print(); //编译错误no matching function for call to 'child::print()'return 0;}由打印输出可得第⼀个打印属于father正常输出,没问题,第⼆个打印是编译错误,我们其实想访问的是⽗类的print,但是由于⼦类定义了print,那么在⼦类的作⽤域中,print这个函数现在只存在⼀个,那就是void print(int a),如果想调⽤⽗类的就要显⽰指定child_test2->father::print();问题2,⼦类可以重写⽗类的函数吗,或者说定义相同的?看代码#include <iostream>class father{public:father() {std::cout << "father()" << std::endl;}void print() {std::cout << "father print" << std::endl;}};class child : public father{public:child() {std::cout << "child()" << std::endl;}void print() {std::cout << "child print" << std::endl;}};int main(){father* father_test = new father();father_test->print(); //打印father printchild* child_test2 = new child();child_test2->print(); //child printreturn 0;}可见是可以定义相同的函数,并重写的问题3,当全局运算符重载遇上类中的运算符重载,优先级是什么 #include <iostream>class child;class father{public:father() {std::cout << "father()" << std::endl;}bool operator==(const father& e) {std::cout << "void print(const father& e)" << std::endl;}};bool operator==(const father& e1, const father& e2) {std::cout << "void print(const child& e1, const child& e2)" << std::endl;}class child : public father{public:child() {std::cout << "child()" << std::endl;}};int main(){child child1_test;child child2_test;child1_test==child2_test;return 0;}输出为void print(const father& e)类中的运算符重载优先级⼤于全局当复制兼容遇上全局重载呢?#include <iostream>class child;class father{public:father() {std::cout << "father()" << std::endl;}bool operator==(const father& e) {std::cout << "void print(const father& e)" << std::endl;}};bool operator==(const child& e1, const child& e2) {std::cout << "void print(const child& e1, const child& e2)" << std::endl;}class child : public father{public:child() {std::cout << "child()" << std::endl;}};int main(){child child1_test;child child2_test;child1_test==child2_test;return 0;}打印:"void print(const child& e1, const child& e2)"仅仅变化了,全局的函数参数类型,正常来说类中和全局的==都是可以的,但是当类中的需要⼀个默认的转换,⼦类到⽗类,全局的是直接类型就对的上的,编译器就优先使⽤全局的说到运算符重载,我们现在定义函数实现类的功能有三种选择:成员函数,全局函数,全局函数+友元函数1.看是否需要虚函数,如果需要虚函数,那么肯定是类的成员函数2.看是否定义的是<<或者>>运算符,我们都知道打印输出是全局<<,但是为什么呢,看⼀下实际的原型针对String⽽⾔ostream& operator<<(ostream& output, const String& string)我们使⽤的时候就是 std::cout << "haha";如果定义为类中的就是ostream& operator<<(ostream& output)使⽤起来就是 "haha"<<"std::cout"看出差别了吧,如果定义在类中使⽤起来就很别扭,继续上⾯的结果,如果是<<或者>>运算符,然后如果需要访问private域,那么就把全局函数变为类对应的友元函数3.当需要对左边的参数进⾏类型转换,需要定义全局函数,因为类中操作符函数,左边的就是类本⾝,如果需要访问private 域,那么就把全局函数变为类对应的友元函数4.其他情况为类的成员函数以上就是详解C++之函数重载的详细内容,更多关于c++之函数重载的资料请关注其它相关⽂章!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九函数的重载和变量的作用域一、实验目的1、了解内联函数、重载函数、带默认参数函数的定义及使用方法。
2、掌握作用域的概念、变量的存储类型及它们之间的差别。
3、掌握程序的多文件组织。
二、实验内容1、重载函数允许不同的函数使用相同的名字,这使得完成类似的任务时可以使用相同的函数名。
范例:编写几个计算面积的函数,分别计算圆、矩形、梯形和三角形的面积,计算边长为1的正方形及其内切圆、内接等腰三角形和等腰梯形面积。
函数原型如下: double area(double radius=0);//圆面积,参数为半径,默认参数为0,表示点面积 double area(double a, double b);// 计算矩形面积,参数为长和宽 double area(double a, double b, double h);//计算梯形面积,参数为两底和高 double area(double a, double b, double c, int);//计算三角形面积,参数为三边长,int 型参数起标示作用,以区别于梯形,不参加计算。
#include<iostream>#include<cmath>using namespace std;const double PI=3.14159;double area(double radius=0);double area(double a,double b);double area(double a,double b,double h);double area(double a,double b,double c,int);int main(){cout<<"Area of point is"<<area()<<'\t';cout<<"Area of square is"<<area(1,1)<<'\n';cout<<"Area of circle is"<<area(0.5)<<'\n';cout<<"Area of trapezium is"<<area(1,0.5,1)<<'\n';cout<<"Area of triangle is"<<area(1,sqrt(1+0.5*0.5),sqrt(1+0.5));return 0;}double area(double radius){return PI*radius*radius;}double area(double a,double b){return a*b;}double area(double a,double b,double h){return (0.5*(a+b)*h);}double area(double a,double b,double c,int){double s=0.5*(a+b+c);return sqrt(s*(s-a)*(s-b)*(s-c));}(1)编译运行程序,并记录运行结果,注意函数调用时,实参与形参之间的关系(包括类型、个数)。
(2)若将计算矩形面积的函数原型改为 double area(double a=0, doubleb=0);重新编译运行情况会怎样?为什么?答:结果不变(3)若将计算三角形面积的函数原型改为 double area(double a, double b,double c);程序还能正确运行吗?为什么?答:不能。
因为前面已经有了这样的函数体了(4)若将计算三角形面积的函数原型改为 double area(double a, double b,double c=0,int); 程序还能正确运行吗?为什么?答:不能正确运行。
2、编程:将上题以多文件方式组织,在area.h 中声明各个area( )函数原型,在area.cpp中定义函数,然后在Exp9_2.cpp中包含area.h,并定义main( )函数并执行。
【注意:】VC++6.0中以c开头的头文件,如不在标准名字空间中,所以area.cpp 中不可以加 using namespace std;程序源代码为:#include<iostream.h>#include"area.h"#include<cmath>int main(){cout<<"Area of point is"<<area()<<'\t';cout<<"Area of square is"<<area(1,1)<<'\n';cout<<"Area of circle is"<<area(0.5)<<'\n';cout<<"Area of trapezium is"<<area(1,0.5,1)<<'\n';cout<<"Area of triangle is"<<area(1,sqrt(1+0.5*0.5),sqrt(1+0.5));return 0;}3、范例:全局变量、局部变量和静态局部变量的应用示例。
#include<iostream>using namespace std;int a=300,b=400,c=500;void funa(int c){static int a=5;a+=c;cout<<a<<' '<<c<<'\n';}void funb(int a){a=b;cout<<a<<'\n';}void func(){int c=0;cout<<a<<' '<<b<<' '<<c<<'\n';::c-=100;}int main(){funa(a);funb(b);funa(b);func();cout<<a<<' '<<b<<' '<<c<<'\n';return 0;}(1) 分析并写出下列程序的执行结果,然后输入计算机执行,比较分析结果与执行结果。
如果两结果不相同请分析原因。
输出结果为:305 300 400 705 400 300 400 0 300 400 4004、设计两个重载函数,分别求两个整数相除的余数和两个实数相除的余数。
两个实数求余定义为实数四舍五入取整后相除的余数。
程序:#include<iostream>using namespace std;int fun(int a,int b){return a%b;}double fun(double a,double b){int i,j;i=a;j=b;if(a-i>=0.5) i=i+1;else i=i;if(b-j>=0.5) j=j+1;else j=j;return i%j;}void main(){double a,b;cout<<"请输入被除数和除数:"<<endl;cin>>a>>b;cout<<"被除数为:"<<'\t'<<a<<'\t'<<"除数为:"<<'\t'<<b<<endl;cout<<"余数为:"<<'\t'<<fun(a,b)<<endl;}实验十类与对象的基本概念一、实验目的类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员。
类是面向对象程序设计的基础。
本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求掌握以下内容:1、掌握面向对象的基本概念和类的定义方法。
2、掌握类成员的访问权限以及访问类成员的方法。
3、掌握内联函数和默认函数。
4、掌握构造函数和析构函数的意义及使用方法。
二、实验内容1、范例:设计并测试一个矩形类(Rectangle)。
属性为矩形的左下角与右上角的坐标,矩形水平放置。
操作为计算矩形的周长和面积。
#include<iostream>#include<cmath>using namespace std;class Rectangle{double left,top;double right ,bottom;public:Rectangle(double l=0,double t=0,double r=0,double b=0);~Rectangle(){};//析构函数,在此函数体为空void Assign(double l,double t,double r,double b);void Show();double Area();double Perimeter();};//构造函数,带缺省参数,缺省值为全0,在声明中指定Rectangle::Rectangle(double l,double t,double r,double b){left=l;top=t;right=r;bottom=b;}void Rectangle::Assign(double l,double t,double r,double b){left=l;top=t;right=r;bottom=b;}void Rectangle::Show(){//成员函数直接使用私有的数据成员cout<<"left-top point is("<<left<<","<<top<<")"<<'\n';cout<<"right-bottom point is("<<right<<","<<bottom<<")"<<'\n';}double Rectangle::Area(){return fabs((right-left)*(bottom-top));}double Rectangle::Perimeter(){return 2*(fabs(right-left)+fabs(bottom-top));}int main(){Rectangle rect;rect.Show();rect.Assign(100,200,300,400);rect.Show();Rectangle rectl(0,0,200);rectl.Show();rectl.Assign(100,200,300,400);rectl.Show();cout<<"面积"<<rect.Area()<<'\t'<<"周长"<<rect.Perimeter()<<endl;cout<<"面积"<<rectl.Area()<<'\t'<<"周长"<<rectl.Perimeter()<<endl;return 0;}(1)将Rectangle(double l=0, double t=0, double r=0, double b=0); 改为Rectangle(double l, double t, double r, double b);程序仍能正确运行吗?为什么?答:不能。