“这个”的重要性

时间:2014-03-05 04:33:56

标签: java c++ this cocos2d-x

我使用cocos2dx在c ++中编程,在添加精灵或对象时,

这 - > addChild(something)addChild(something)

的工作原理。两种方式都得出相同的结果。

但不仅在c++中, this 也在android编程中使用(也许,所有编程语言都使用“this”?)。我在Java中使用它来替换ClassName.class,使用简单的 this 。但除此之外, this 以多种方式使用。

但是因为我没有深入编程语言,我不知道他们是否真的做同样的工作(这个> addChildaddChildClassName.classthis)。

为什么我们需要 this

自答:

this 是一个关键字,它引用许多面向对象编程语言中的当前类实例或对象。

所以...只是为了安慰?

6 个答案:

答案 0 :(得分:7)

this有一些用途。首先,在某些情况下,您需要在当前方法中显式引用receiver对象,可能是您将其作为参数传递给另一个函数。例如,考虑一下这个C ++代码:

void someOtherFunction(SomeClass* arg);

void SomeClass::doSomething() {
    someOtherFunction(this);
}

这里,someOtherFunction是一个自由函数,它接收一个指向SomeClass对象的指针。在doSomething的上下文中调用它以便接收器对象是参数的唯一方法是使用this

C ++中的

this也用于赋值运算符,它需要返回对接收者对象的引用:

MyClass& MyClass::operator= (MyClass rhs) {
    // Do something to the receiver object
    return *this;
}

此处,return *this;表示“返回对接收者对象的引用”,如果没有this则无法表达。

在某些情况下,

this也用于消除歧义。例如:

public class MyClass {
    private int value;

    public MyClass(int value) {
        this.value = value;
    }
}

此处,在this构造函数中使用MyClass是为了区分参数value和字段value。参考value本身选择参数,而使用this.value引用该字段。

希望这有帮助!

答案 1 :(得分:3)

也考虑正常类型的构造函数或setter

public ConstrcutMe (String name, int age)
{
    this.name = name;
    this.age = age;
}

public void setName (String name) {
{
   this.name = name;
}

我相信这充分说明了我们需要this

的原因

答案 2 :(得分:2)

在实例方法或构造函数中,this是对当前对象的引用 - 正在调用其方法或构造函数的对象。您可以使用this从实例方法或构造函数中引用当前对象的任何成员。

Java中的用法:

以下是this关键字的使用情况。

  1. this关键字可用于引用当前的类实例变量。

  2. this()可用于调用当前的类构造函数。

  3. this关键字可用于调用当前类方法(隐式)

  4. this可以在方法调用中作为参数传递。

  5. this可以在构造函数调用中作为参数传递。

  6. this关键字也可用于返回当前的类实例。

  7. 让我们考虑一个问题:

    class student
    {  
        int id;  
        String name;  
    
        student(int id,String name)
        {  
            id = id;  
            name = name;  
        }  
        void display()
        {
            System.out.println(id+" "+name);
        }  
        public static void main(String args[])
        {  
            student s1 = new student(1,"NameA");  
            student s2 = new student(2,"NameB");  
            s1.display();  
            s2.display();  
        }  
    }  
    

    输出将是:

    0 null
    0 null
    

    解决问题的方法:

    class Student
    {  
        int id;  
        String name;  
        student(int id,String name)
        {  
            this.id = id;  
            this.name = name;  
        }  
        void display()
        {
            System.out.println(id+" "+name);
        }  
        public static void main(String args[])
        {  
            Student s1 = new Student(1,"NameA");  
            Student s2 = new Student(2,"NameB");  
            s1.display();  
            s2.display();  
        }  
    }  
    

    输出将是:

    1 NameA
    2 NameB
    

答案 3 :(得分:2)

在C ++中,this是一个关键字,它计算指向调用该方法的对象的指针。

为方便起见,编译器可以在某些情况下弄清楚要在同一对象上调用另一个方法的位置。如果对象具有fooBar方法,则可以将其写为this->fooBar();,或者为方便起见,您只需编写fooBar();,编译器将其理解为this->fooBar();

但是,在其他情况下,您确实需要明确使用this。考虑是否希望该方法返回实例本身。您必须以某种方式引用实例本身,您可以使用return this;来执行此操作。或者,如果您想要调用另一个函数,请说barMan,传入实例本身 - 再次使用thisbarMan(this);

答案 4 :(得分:1)

this关键字(或Python中的self等效关键字)是一种“引用已调用执行方法的实例”的机制,尽管其含义可能不同于语言和背景。这个 - 哈! - 因此在需要从给定方法中“传递当前实例”时非常方便。

此外,某些语言要求在调用成员时手动指定this(或其他评估实例的表达式);也就是说,必须始终指定thisthis.m()。其他语言允许"implicit receiver"表示this.m()m()是等效的,其中m是与当前实例关联的成员函数。

同样,Type.m()的使用通常表示对类型上定义的“静态方法”的调用;再一次,这是特定于语言的,有些语言支持一流的类型值,其中没有任何方法真正“静态”。

除了特定语言的定义方式之外,没有特别的押韵或理由 - 问题应该集中在中的特定上下文特定的语言 1 。对于我能用一种语言给出的大多数理由,我可以用不同的“OOP”语言给出一个反例。


1 例证:您引用ClassName.class,但是,在Java中,这只是获取相应Class对象的特殊语法,并且没有< / em>与this或成员(静态或非静态)有关。

答案 5 :(得分:1)

正如您所说,this关键字用于指代给定类的当前实例。

在面向对象语言(如C ++和Java(用于Android开发))中查看this关键字非常常见,因为它可以使代码更易于阅读和更加统一。非面向对象的语言往往没有它,虽然我确信你可以找到一个。

我最喜欢的例子是构造函数和实例变量。如果你是一个类Ducky和一个实例变量String duckName,那么构造函数看起来像是这样的:

public Ducky(String duckName)
{
  this.duckName = duckName;
}

这样,您可以在多个上下文中使用明确的变量名称,而不会让您自己和/或未来的代码维护者感到困惑。