形参与成员名字重名,用this来区分:
时间: 2024-09-20 11:04:38 浏览: 10
在面向对象编程中,有时候可能会遇到形参(函数或方法的输入参数)和成员变量(类中的属性)名字相同的情况。当这种情况发生,为了明确区分它们,可以使用关键字`this`。`this`关键字用于引用当前对象自身,特别是在方法内部,它代表的是调用该方法的对象。
例如,在JavaScript或Java这样的语言中:
```javascript
function MyClass(x) {
var x; // 这是一个局部变量x,与参数x同名
this.myVariable = x; // 使用this指代实例的myVariable
function method() {
let x = this.x; // 在方法内部,this.x指的是成员变量x
console.log(this.myVariable); // 输出实例的myVariable值
}
}
```
在这个例子中,当你在`method`中提到`x`时,如果没有上下文,可能会引起混淆。通过使用`this.x`,你可以明确地指定你想访问的是类的成员变量,而不是局部变量。
相关问题
c 语言形参与实参重名
在C语言中,形参和实参可以重名。当函数被调用时,实参的值会被传递给形参,形参会在函数内部被当做变量来使用。如果形参和实参重名,那么在函数内部使用该变量时,会优先使用形参的值。例如:
```c
#include <stdio.h>
void func(int num) {
printf("形参num的值为:%d\n", num);
}
int main() {
int num = 10;
func(num); // 调用函数
return 0;
}
```
在上面的例子中,函数`func`的形参为`num`,在`main`函数中定义了一个变量`num`并将其值赋为10,然后调用`func`函数并将`num`作为实参传递给`func`函数。在`func`函数内部,使用`num`变量时会优先使用形参`num`的值,因此输出结果为“形参num的值为:10”。
this是不是非静态成员函数的隐藏形参
是的,this指针是非静态成员函数的一个隐藏形参。当调用非静态成员函数时,编译器会自动将当前对象的地址作为this指针传递给函数。这样,在非静态成员函数内部,就可以通过this指针来访问当前对象的成员变量和成员函数。this指针在函数内部是一个常量指针,不能被修改。它的类型是指向类类型的指针,且不需要显式声明和使用,编译器会自动处理。