在派生类中重新定义基类的友元函数
Redefining Friend Function of Base Class in Derived Class
我想重新定义最初定义为Vector
类中的友元operator*
函数,在派生类中,BigNum
. 具体来说,我想调用operator*
的Vector
版本,然后在BigNum
的运算符*中对该操作的结果执行一些其他操作。 这是结构的片段(再次感谢@lemmes对此的帮助):
template<typename T>
class Vector
{
private:
std::vector<T> base;
public:
Vector();
Vector(const std::vector<T> vec);
Vector(const Vector& vec);
template<typename T1, typename T2>
friend auto operator*(const Vector<T1>& lhs, const Vector<T2>& rhs) -> Vector<decltype(std::declval<T1>() * std::declval<T2>())>;
};
template<typename T1, typename T2>
auto operator*(const Vector<T1>& lhs, const Vector<T2>& rhs) -> Vector<decltype(std::declval<T1>() * std::declval<T2>())>
{
typedef decltype(std::declval<T1>() * std::declval<T2>()) T3;
assert(lhs.base.size() == rhs.base.size());
Vector<T3> result;
result.base.reserve(lhs.base.size());
std::transform(lhs.base.begin(), lhs.base.end(), rhs.base.begin(), std::back_inserter(result.base),
[](const T1& e1, const T2& e2) { return e1 * e2; });
return result;
}
class BigNum : public Vector<int>
{
public:
BigNum();
BigNum(const std::vector<int> init);
~BigNum();
BigNum operator*(const BigNum& rhs);
};
#endif
BigNum BigNum::operator*(const BigNum& rhs)
{
// How can I call Vector's operator* (a friend of the Vector class)
// and then do other stuff in here?
}
#include "BigNum.h"
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = {10,20,30,40,50};
std::vector<int> vec1 (arr1, arr1 + sizeof(arr1) / sizeof(arr1[0]));
std::vector<int> vec2 (arr2, arr2 + sizeof(arr2) / sizeof(arr2[0]));
BigNum bn1(vec1), bn2(vec2);
bn1 * bn2; // want to call BigNum's operator* here
return 0;
}
我显然不能做像Vector::operator*
这样的事情,因为它是朋友。 提前感谢!
您可以编写static_cast<Vector<int>&>(bn1) * static_cast<Vector<int>&>(bn2)
来调用向量的重载运算符。
相关文章:
- 如何定义一个纯抽象基类
- 使用子类覆盖基类中定义的函数
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 错误:基类在从基类父派生类 Son 时未定义
- 无法使用在子类中定义的虚拟getter实现基类
- 从派生类重新定义基类中定义的结构
- 在派生类中重新定义基类的友元函数
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- C++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表
- 'class'类型重定义/基类未定义
- 使用派生类成员的地址定义基类成员指针
- 派生类是否可以在类声明中定义基类数组的大小
- 错误 C2504:'ostream_withassign':未定义基类
- 关于c++中的继承,派生类是否可以在不显式定义基类的情况下从基类获得实现
- 定义基类的静态变量
- 错误 C2504:"自动售货机":未定义基类