繁体   English   中英

在C ++中使用指针调用重载=运算符的约定是什么?

[英]what is the convention for calling overloaded = operator in C++ using pointers?

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

ClassA ObjA, ObjB;

ObjA = ObjB;

但是指针呢?

Class *PtrA, *PtrB;

PtrA->operator=(PtrB)

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

通常,只为类而不是指针定义赋值运算符,然后您可以执行以下操作:

*ptrA = *ptrB;

不是你的例子

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

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

 PtrA->operator =(PtrB);

或作为

*PtrA = PtrB;

出于显而易见的原因,后者是使用分配运算符的更自然的方法。

但是,将赋值运算符定义为接受ClassA *类型的参数是一件很奇怪的事情。 通常, ClassA赋值运算符将接受const ClassA &类型的参数,并作为

*PtrA = *PtrB;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM