面试题答案
一键面试- 措施描述
- 代码审查:每次对
MyClass
的成员变量或结构进行修改时,仔细审查友元函数operator +
的实现,确保其仍然正确使用MyClass
的成员。例如,如果MyClass
新增了一个与运算相关的成员变量,需要在operator +
中合理处理这个新变量。 - 单元测试:为
operator +
编写全面的单元测试。使用测试框架(如Google Test),针对MyClass
不同状态和不同输入组合,测试operator +
的正确性。当MyClass
发生变化时,重新运行这些单元测试,确保operator +
的行为仍然符合预期。 - 封装与抽象:尽量减少
operator +
对MyClass
内部细节的直接依赖。可以在MyClass
中提供一些公共的接口函数,operator +
通过调用这些接口函数来完成运算,而不是直接访问成员变量。这样当成员变量结构改变时,只要接口函数保持不变,operator +
就不需要修改。
- 代码审查:每次对
- 代码示例
#include <iostream>
class MyClass {
private:
int data;
public:
MyClass(int value) : data(value) {}
// 提供一个获取数据的接口函数
int getData() const {
return data;
}
// 提供一个设置数据的接口函数
void setData(int value) {
data = value;
}
// 友元函数声明
friend MyClass operator+(const MyClass& a, const MyClass& b);
};
// 友元函数定义
MyClass operator+(const MyClass& a, const MyClass& b) {
// 通过接口函数获取数据
int sum = a.getData() + b.getData();
return MyClass(sum);
}
int main() {
MyClass a(5);
MyClass b(3);
MyClass result = a + b;
std::cout << "Result: " << result.getData() << std::endl;
return 0;
}
在上述示例中,如果MyClass
的data
成员变量的类型或存储方式发生改变,只要getData
和setData
接口函数保持不变,operator +
函数就不需要修改,从而保证了兼容性。同时,在实际项目中,应该为operator +
编写单元测试来验证其正确性。