使用指针在C ++中调用overloaded = operator的惯例是什么?

时间:2010-09-03 23:21:25

标签: c++

当为类重载“=”运算符时,通常的语法是:

ClassA ObjA, ObjB;

ObjA = ObjB;

但指针呢?

Class *PtrA, *PtrB;

PtrA->operator=(PtrB)

上述调用约定是否正确,假设ClassA中的=运算符是为类(ClassA* operator=(const ClassA* obj))上的指针定义的?

3 个答案:

答案 0 :(得分:3)

通常只为类而不是指针定义赋值运算符,然后你可以这样做:

*ptrA = *ptrB;

答案 1 :(得分:2)

在你的例子中不是那样

Class *PtrA, *PtrB;

PtrA->operator=(PtrB)

您没有传入PtrB的实例,而是传入指向PtrB的指针;

实际上你的代码当然没有意义。你不能说

Class *PtrA, *PtrB;

我认为你的意思是

Class A
{
}
Class B
{
  B operator=(const A &rhs){...}
}

A *ptra = ...
B *ptrb = ...

在这种情况下,你可以去

*ptrb = *ptra;

ptrb->operator=(*ptra);

你当然不能去

ptrb->operator=(ptra)

或(等效的简单语法)

*ptrbb = ptra

答案 2 :(得分:1)

如果ClassA中的分配运算符接受ClassA *(或const ClassA *)类型的参数,则可以将其称为

 PtrA->operator =(PtrB);

*PtrA = PtrB;

后者是使用分配算子的更自然的方式,原因很明显。

但是,定义赋值运算符以接受类型ClassA *的参数是一件相当古怪的事情。通常,ClassA的赋值运算符将接受const ClassA &类型的参数并被调用为

*PtrA = *PtrB;