public class Foo { int num = 1; public void change(){ num = 2; } public void change(int num){ num = 3; } public void change(Foo pt){ pt.num = 4; } public static void main(String[] args) { Foo pt = new Foo(); int num = 5; pt.change(); System.out.println("1->:"+ pt.num); pt.change(num); System.out.println("2->:"+ pt.num); pt.change(pt); System.out.println("3->:"+ pt.num); }结果为什么是1->:2 2->:2 3->:4
时间: 2024-02-14 21:31:13 浏览: 22
这是因为在代码中存在重载的方法 `change()`,它有三个不同的参数形式:无参、`int`类型的参数和`Foo`类型的参数。
在 `main()` 方法中,首先创建了一个名为 `pt` 的 `Foo` 对象,并将其 `num` 的初始值设置为 1。
接下来调用了 `pt.change()` 方法,由于该方法没有参数,因此会执行无参的 `change()` 方法,将 `num` 的值改为 2。
然后调用了 `pt.change(num)` 方法,该方法有一个 `int` 类型的参数,但是在方法中只是将传入的参数 `num` 的值改为 3,并没有改变对象 `pt` 的 `num` 值,所以 `pt.num` 的值仍然是 2。
最后调用了 `pt.change(pt)` 方法,该方法有一个 `Foo` 类型的参数,它将传入的 `pt` 对象的 `num` 值改为 4,所以 `pt.num` 的值变为了 4。
因此,最终的输出结果是:1->:2,2->:2,3->:4。
相关问题
using pFunc = void(*)(int); 语法分析
这行代码定义了一个函数指针类型 `pFunc`,它可以指向一个参数为 `int`,返回值为 `void` 的函数。具体解释如下:
- `using` 是 C++11 引入的关键字,用于定义类型别名。这里使用 `using` 关键字定义了一个函数指针类型别名 `pFunc`。
- `void` 表示函数的返回类型,即该函数不返回任何值。
- `(*)` 表示该类型别名是一个指向函数的指针类型。
- `(int)` 表示该函数指针类型所指向的函数的参数类型为 `int`。
因此,`pFunc` 类型的变量可以指向一个参数为 `int`,返回值为 `void` 的函数。例如,可以这样定义一个 `pFunc` 类型的变量并将其指向一个函数:
```cpp
void foo(int x) {
// ...
}
pFunc ptr = &foo; // 将 ptr 指向 foo 函数
```
public static void Main() { Console.WriteLine(Foo()); } public static int Foo(int i=2) { if (i <= 0) return 0; else if (i > 0 && i <= 2) return 1; else return Foo(i - 1) + Foo(i - 2); }创建一个数组,把返回值放到数组当中
您可以按照以下步骤创建一个数组,并将 Foo() 方法的返回值存储到数组中:
1. 在 Main() 方法中,创建一个长度为 10 的整型数组:
```
int[] resultArray = new int[10];
```
2. 在输出语句之前,使用 for 循环遍历数组,并在循环体中调用 Foo() 方法,并将返回值存储到数组中:
```
for (int i = 0; i < resultArray.Length; i++) {
resultArray[i] = Foo(i+1);
}
```
3. 在 Console.WriteLine() 语句中,输出数组的值:
```
Console.WriteLine(string.Join(", ", resultArray));
```
完整代码如下:
```
public static void Main() {
int[] resultArray = new int[10];
for (int i = 0; i < resultArray.Length; i++) {
resultArray[i] = Foo(i+1);
}
Console.WriteLine(string.Join(", ", resultArray));
}
public static int Foo(int i=2) {
if (i <= 0) return 0;
else if (i > 0 && i <= 2) return 1;
else return Foo(i - 1) + Foo(i - 2);
}
```