面试题答案
一键面试-
思路:
- 对于
MyClass + int
的情况,在MyClass
类中重载operator+
运算符,参数为int
类型。 - 对于
int + MyClass
的情况,由于int
是内置类型,无法在int
类中重载运算符,所以需要在全局作用域中重载operator+
,参数顺序为int
和MyClass
。此时,为了使全局重载的operator+
能正确处理MyClass
及其派生类对象,MyClass
类需要提供一个类型转换函数(如转换为int
类型),以便在全局operator+
中使用。 - 为了实现多态,
MyClass
类中的operator+
应该声明为虚函数,派生类可以重写该虚函数来实现不同的行为。
- 对于
-
代码实现:
#include <iostream>
class MyClass {
public:
// 虚函数,用于处理 MyClass + int 的情况
virtual MyClass operator+(int num) const {
// 这里简单返回一个新的 MyClass 对象,实际应用中可以有更复杂的逻辑
return MyClass();
}
// 类型转换函数,用于处理 int + MyClass 的情况
operator int() const {
return 0;
}
};
// 全局作用域中重载 operator+,用于处理 int + MyClass 的情况
MyClass operator+(int num, const MyClass& obj) {
// 这里可以利用 MyClass 的类型转换函数进行计算
int value = static_cast<int>(obj);
return MyClass();
}
class DerivedClass : public MyClass {
public:
// 重写虚函数,实现不同的行为
DerivedClass operator+(int num) const override {
// 这里简单返回一个新的 DerivedClass 对象,实际应用中可以有更复杂的逻辑
return DerivedClass();
}
};
可以通过以下方式测试代码:
int main() {
MyClass myObj;
DerivedClass derivedObj;
int num = 5;
MyClass result1 = myObj + num;
MyClass result2 = num + myObj;
DerivedClass derivedResult1 = derivedObj + num;
MyClass derivedResult2 = num + derivedObj;
return 0;
}
上述代码中,MyClass
类定义了虚的 operator+
用于 MyClass + int
的情况,定义了类型转换函数用于 int + MyClass
的情况。DerivedClass
继承自 MyClass
并重写了 operator+
以实现多态行为。在 main
函数中对不同情况进行了测试。