你如何在对象中使用C ++中的“this”指针?

时间:2014-04-22 22:41:57

标签: c++ class compare this

这是我的班级,

#ifndef CARD_H
#define CARD_H

class Card
{
    private:
            int suit, value;
    public:
            Card (int, int);
            int Compare (Card)const;
            void print_card()const;
};

#endif

对于我的比较功能,我想比较两张牌的值,然后比较两张牌,如果对象牌更大则返回1,如果我正在比较它的牌更大则返回0。我该如何做到这一点?

我的Card构造函数应该创建一个新卡,但我不允许在构造函数语句中使用“new”。如果是这样的话我该如何制作新卡呢?

这是我尝试进行比较的原因:

int Card::Compare(Card c1) const
{

    if ( c1 == NULL && this == NULL ) return 0;
    else if ( c1 == NULL ) return -1;
    else if ( this == NULL ) return 1; 

    else if ( c1.value > this.value ) return 1;
    else if ( c1.value < this.value ) return -1;
    else if ( c1.value == this.value )
    {
        if ( c1.suit > this.suit ) return 1;
        if ( c1.suit < this.suit ) return -1;
    }

3 个答案:

答案 0 :(得分:0)

我认为你应该阅读一本基础的C ++教程。 简而言之:

1)你不需要this指针,它是隐含的,一般来说使用它来访问成员并不是一个好习惯(有时你没有选择用局部变量消除歧义) ):

bool Card::Compare(const Card &c1) const  // Note, usage of const reference
{ 
    // c1 is NOT a pointer, no need to check for NULL
    // checking this is not a usual idiom

    if ( c1.value > value ) return true;  // same as if ( c1.value > this->value ) return true;
    if ( c1.value < value ) return false; 
    if ( c1.suit > suit ) return true;
    if ( c1.suit < suit ) return false;
    return true;
}

2)当客户端创建一个Card时,会调用构造函数,它不需要做任何事情。

Card *some_card = new Card(1, 2); // constructor is called with 1 and 2

请注意,自动分配不需要new

Card some_card(1, 2); // constructor is called with 1 and 2

现在,您的代码可以改进多项内容,例如不使用int,因为它不是类型安全的,并且使用运算符&gt;和&lt;比较卡。

答案 1 :(得分:0)

在C ++中,this 指针是指向该类当前实例的指针。

因为它是一个指针,你必须把它当作一个指针:
this->member(*this).member

在C ++中,您只需使用this指针来避免与方法参数的命名冲突。

我从未使用this指针,因为我直接引用成员,故意在方法参数和成员变量之间使用不同的名称。

答案 2 :(得分:0)

当您想在课堂外使用时,通常会使用“this”对象。如果要调用类外部的函数并希望将当前对象传递给该函数,则将传入“this”指针。该函数显然必须使用相同的类(或者是一个来自类的)来调用函数。

示例:

void DoSomeThingElse(A *object) {};

class A
{
    void DoSomething()
    {
        DoSomethingElse(this);
    }
}