、如果将运算符“* ”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是( )。
A、1个
B、0个
C、0个1个均可
D、2个
C,0个1个均可。
0个类似于指针的解引用(dereference )运算,如:
struct IntPtr {
int *ptr_;
int& operator*() { return *ptr_; }
};
1个类似算术乘法运算,如:
Struct Integer {
int val_;
int operator*(Integer& rhs) { return val_ * rhs.val_; }
};
a 1个
因为乘法是二元运算符,而成员函数省略掉自己了。
同意上面选择C的答案,但是不同意上面写运算符重载的函数。
如下代码:(使用了默认的拷贝构造函数)
class Test
{
public:
Test(int t)
{
a = t;
}
~Test(){}
Test operator*()
{
printf("argument 0\n");
return Test(this->a);
}
Test operator*(Test &t)
{
printf("argument 1\n");
return Test(this->a * t.a);
}
void output()
{
printf("a value: %d\n", a);
}
public:
int a;
};
0个或1个,指针和乘法的重载