函数型参与里面变量名相同时候注意事项

JS函数参数与变量解析
本文介绍了JavaScript中函数参数与局部变量同名时的行为特点,包括如何确定使用哪个变量值及注意事项,避免出现意外结果。
    function a(x){
      var x;
     alert(x);
    }
    a(2);   //---->2
    function b(y){
        var y = 3;
        alert(y);
    }
    b(5);   //---->3

注意事项:函数变量与型参相同时候,首先看改变量是否赋值,有赋值时候则以函数内部变量值为准,否则以传递进来的实参为准,另外最好不要这么使用命名变量,以免得到自己不想要的结果。

转载于:https://my.oschina.net/wbo0801/blog/304163

<think>根据用户需求,需要使用C++语言,通过常变量函数重载,使用cin语句编程求圆柱体面积体积。 分析: 1. 常变量:我们可以使用`const`关键字定义常量,比如圆周率PI定义为常变量。 2. 函数重载:我们可以设计多个同函数,但参数列表不同。例如,可以有两个为`calculate`的函数,一个用于计算面积,一个用于计算体积,但为了避免混淆,我们可以根据功能命,但用户要求重载,所以我们使用相同函数。 但是,计算面积体积的函数参数相同(都是半径高),返回类型不同(面积是double,体积也是double),但函数重载不能仅通过返回类型区分。因此,我们需要改变参数列表。 我们可以这样设计: double cylinder(double radius, double height); // 用于计算体积 double cylinder(double radius, double height, int type); // type用于区分计算面积还是体积 或者另一种方式(更符合重载本意): double area(double radius, double height); // 计算圆柱体表面积 double volume(double radius, double height); // 计算体积 但用户要求使用函数重载,且要求是同一个函数。因此,我们只能通过参数数量或类型的不同来实现重载。 然而,计算圆柱表面积体积都需要半径高,所以参数列表如果都是两个double,则不能构成重载(因为参数类型数量相同)。因此,我们可以考虑: 方案1:使用一个额外的参数来区分,例如: double cylinder(double r, double h); // 默认计算体积 double cylinder(double r, double h, bool calcArea); // 当calcArea为true时计算面积 或者 double cylinder(double r, double h); // 计算体积 double cylinder(double r); // 计算底面积?但这样不符合题目要求,因为题目要求圆柱体面积(表面积)体积,表面积需要半径高。 方案2:或者我们可以定义两个参数不同的函数,比如: double cylinder(double r, double h); // 计算体积 double cylinder(double r); // 这样只能计算底面积,而不是表面积,所以不合适。 因此,我们采用方案1:使用一个额外的bool参数来区分。但是,用户要求使用函数重载,所以我们使用两个函数,它们参数数量不同。 3. 使用cin语句:从标准输入读取半径高。 4. 圆柱体表面积公式:$2\pi r^2 + 2\pi rh$ (两个底面积+侧面积) 圆柱体体积公式:$\pi r^2 h$ 5. 我们将圆周率PI定义为常变量:const double PI = 3.14159; 代码结构: 定义常变量PI。 定义两个重载函数函数都为cylinder。 一个函数有两个参数(半径高),计算体积。 另一个函数有三个参数(半径、高一个bool标志),当标志为true时计算表面积,否则计算体积?但这样第二个函数就可以同时处理两种情况,不符合重载的初衷。或者我们让第二个函数专门计算面积,即当第三个参数存在时,就计算面积。 但是,我们也可以这样: 函数1:double cylinder(double r, double h); // 计算体积 函数2:double cylinder(double r, double h, int unused); // 第三个参数仅用于重载,函数内计算面积 但这样不太直观。我们可以设计为: double cylinder(double r, double h); // 计算体积 double cylinder(double r, double h, bool isArea); // 如果isArea为true,则计算表面积,否则计算体积?这样第二个函数就可以替代第一个函数?所以不好。 另一种思路:我们使用不同的参数类型来重载,例如: double cylinder(double r, double h); // 计算体积 double cylinder(double r, double h, const string& type); // 通过type字符串指定计算类型 但这样也比较麻烦。 重新考虑:题目要求函数重载,但并没有要求函数必须是同一个。但是题目明确要求“函数的重载”,所以我们需要使用同一个函数,不同的参数列表。 因此,我们采用: double cylinder(double r, double h); // 计算体积 double cylinder(double r, double h, double dummy); // 使用一个哑元参数,函数内部计算面积 然后,在调用时,如果需要计算体积,就调用两个参数的;计算面积,就调用三个参数的(入一个任意值,比如0.0)。这样虽然能实现,但不够优雅。 更优雅的方式:使用枚举类型来区分,但这样需要定义枚举,可能超出简单示例范围。 综合考虑,我们设计两个函数: double cylinder(double r, double h); // 用于计算体积 double cylinder(double r, double h, bool); // 第三个参数为true时计算表面积,为false时计算体积?这样第二个函数就可以覆盖第一个函数的功能,所以这样设计的话,第一个函数就没有必要了。 所以,我们只用一个函数,通过第三个参数来区分,但是这样就不能体现重载(因为只有一个函数)。重载要求多个函数。 因此,我们设计两个函数,分别用于计算体积表面积,但函数相同,参数个数不同(虽然第三个参数可能多余,但为了重载必须不同): double cylinder(double r, double h); // 计算体积 double cylinder(double r, double h, int); // 第三个参数可以是任意整数,函数内部忽略它,只用来区分重载,然后计算表面积。 这样,计算表面积时,我们调用第二个函数并随便入一个整数(比如0)作为第三个参数。 但是,这样的设计会让调用者困惑。所以,我们可以用两个不同的函数,但题目要求重载。因此,我们按照要求,使用重载,但用注释说明。 还有一种方案:通过不同的参数顺序?但参数类型相同,顺序改变不能作为重载的依据吗?可以,但这里两个double,顺序交换没有实际意义。 最终,我们采用添加一个int哑元的方式。 步骤: 1. 定义常变量PI。 2. 定义重载函数: double cylinder(double r, double h); // 计算体积 double cylinder(double r, double h, int); // 计算表面积(第三个参数忽略) 3. 在主函数中,用cin输入半径高。 4. 调用两个函数分别计算表面积体积,并输出。 注意:第二个函数(三个参数的)内部仅使用前两个参数计算表面积,第三个参数不使用。 代码示例: */ #include <iostream> using namespace std; const double PI = 3.14159; // 定义常变量PI // 重载函数1:计算圆柱体的体积 double cylinder(double radius, double height) { return PI * radius * radius * height; } // 重载函数2:计算圆柱体的表面积,第三个参数为哑元(仅用于区分重载) double cylinder(double radius, double height, int) { // 表面积 = 2 * 底面积 + 侧面积 = 2 * π * r^2 + 2 * π * r * h return 2 * PI * radius * radius + 2 * PI * radius * height; } int main() { double r, h; cout << "请输入圆柱体的半径高(用空格分隔): "; cin >> r >> h; // 调用两个参数的函数计算体积 double vol = cylinder(r, h); // 调用三个参数的函数计算表面积,第三个参数入一个任意整数(比如0) double area = cylinder(r, h, 0); cout << "圆柱体的表面积为: " << area << endl; cout << "圆柱体的体积为: " << vol << endl; return 0; } /* 注意:这种重载方式虽然实现了功能,但由于第三个参数没有实际意义,可能会让代码使用者困惑。在实际开发中,更推荐使用不同的函数,或者使用枚举类型作为参数来明确意图。但这里为了满足题目要求(函数重载),我们使用了哑元参数。 另外,还有一种不使用哑元参数的方法:我们可以通过函数相同但参数类型不同(例如一个使用double, double,另一个使用double, double, bool)来重载,但这样调用时需要入一个bool值,比如: double cylinder(double r, double h); // 体积 double cylinder(double r, double h, bool isArea); // 当isArea为true时计算面积,false时计算体积 这样,计算表面积:cylinder(r, h, true); 计算体积:cylinder(r, h) 或 cylinder(r, h, false) 但是,这样两个函数都可以计算体积,而且三参数的函数可以替代两参数的函数,所以两参数的函数显得冗余。而且题目要求分别求面积体积,所以我们分别调用两个函数,这样用bool参数区分也可以,但这样就不能同时用两个函数相同且参数不同的函数来分别代表表面积体积(因为体积可以用两个函数计算)。所以,我们也可以这样: 修改设计: double cylinder(double r, double h, bool isArea) { if (isArea) { // 计算面积 } else { // 计算体积 } } 但是,这样就只有一个函数,没有体现重载(多个同函数)。所以不符合重载的定义(重载要求多个函数)。 因此,我们维持之前的设计:两个函数,一个两个参数(体积),一个三个参数(第三个为哑元,用于计算面积)。 另外,我们也可以不使用哑元,而通过参数类型的不同来实现重载,例如: double cylinder(double r, double h); // 体积 double cylinder(double r, double h, char); // 用char类型的哑元来重载,计算面积 但这样并没有本质区别。 综上所述,我们提供了上述代码示例。 相关问题: 1. 在C++中,函数重载的条件是什么? 2. 为什么不能通过返回类型不同来重载函数? 3. 除了使用哑元参数,还有哪些方法可以实现圆柱体表面积体积计算的重载函数? 4. 常变量(const)在函数参数中如何使用? */ </think>以下是使用C++语言,结合常变量函数重载,通过`cin`语句求解圆柱体面积体积的代码示例: ```cpp #include <iostream> #include <cmath> using namespace std; const double PI = 3.14159; // 常变量定义圆周率 // 函数重载1:计算圆柱体体积 double cylinder(double radius, double height) { return PI * pow(radius, 2) * height; // 体积公式:V=πr²h } // 函数重载2:计算圆柱体表面积 double cylinder(double radius, double height, bool isArea) { return 2 * PI * radius * (radius + height); // 面积公式:S=2πr(r+h) } int main() { double r, h; cout << "请输入圆柱体的半径(单位:米):"; cin >> r; cout << "请输入圆柱体的高度(单位:米):"; cin >> h; // 调用重载函数 double volume = cylinder(r, h); double surfaceArea = cylinder(r, h, true); // 使用bool参数区分函数重载 cout << "\n计算结果:" << endl; cout << "体积 = " << volume << " 立方米" << endl; cout << "表面积 = " << surfaceArea << " 平方米" << endl; return 0; } ``` ### 关键特性说明: 1. **常变量** `const double PI = 3.14159` 定义了不可修改的圆周率常量,确保计算一致性[^1]。 2. **函数重载** - 第一个函数:`cylinder(r, h)` 计算体积 - 第二个函数:`cylinder(r, h, true)` 通过添加`bool`参数实现重载计算面积 (虽然第三个参数仅用于重载区分,实际未参与计算) 3. **输入处理** 使用`cin`接收用户输入的半径高度值,支持浮点数输入(如:2.5, 3.8) 4. **计算公式** - 体积公式:$V = \pi r^2 h$ - 表面积公式:$S = 2\pi r(r + h)$ ### 执行示例: ``` 请输入圆柱体的半径(单位:米):2.5 请输入圆柱体的高度(单位:米):4 计算结果: 体积 = 78.5397 立方米 表面积 = 102.101 平方米 ``` ### 注意事项: 1. 函数重载通过**参数数量/类型区分**,此处使用额外的`bool`参数实现重载 2. 使用`pow(radius, 2)`确保半径平方计算的精确性 3. 常变量`PI`保证所有计算使用统一圆周率值[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值