当为类重载“=”运算符时,通常的语法是:
ClassA ObjA, ObjB;
ObjA = ObjB;
但指针呢?
Class *PtrA, *PtrB;
PtrA->operator=(PtrB)
上述调用约定是否正确,假设ClassA中的=
运算符是为类(ClassA* operator=(const ClassA* obj)
)上的指针定义的?
答案 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;