设计思路
- 成员函数重载:在
Container
模板类内部定义operator +=
成员函数。这种方式直接操作类的成员变量,对于类型安全和多态特性的保证依赖于模板参数的一致性,即两个Container
对象的模板参数类型必须相同。
- 友元函数重载:定义一个友元函数来重载
operator +=
。友元函数可以访问类的私有成员,在类型安全方面同样依赖模板参数的一致性,并且可以通过模板参数实现多态。
- 普通非成员函数重载:在类外部定义非成员函数来重载
operator +=
。这种方式同样依赖模板参数保证类型安全,并且能通过模板和虚函数机制实现多态。
关键代码片段
// 模板类定义
template <typename T>
class Container {
private:
// 假设这里有存储数据的成员变量,例如std::vector<T> data;
std::vector<T> data;
public:
// 成员函数重载operator +=
Container<T>& operator+=(const Container<T>& other) {
for (const auto& element : other.data) {
data.push_back(element);
}
return *this;
}
// 友元函数声明
template <typename U>
friend Container<U>& operator+=(Container<U>& lhs, const Container<U>& rhs);
};
// 友元函数定义
template <typename T>
Container<T>& operator+=(Container<T>& lhs, const Container<T>& rhs) {
for (const auto& element : rhs.data) {
lhs.data.push_back(element);
}
return lhs;
}
// 普通非成员函数重载
template <typename T>
Container<T>& operator+=(Container<T>& lhs, const Container<T>& rhs) {
for (const auto& element : rhs.data) {
lhs.data.push_back(element);
}
return lhs;
}