这是我的班级,
#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;
}
答案 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);
}
}