gpt4 book ai didi

c++ - 如何在对基类和派生类进行操作时返回派生类型?

转载 作者:行者123 更新时间:2023-11-30 03:37:14 25 4
gpt4 key购买 nike

我有两个类,my_matrixmy_vector 类,其中 my_vector 派生自 my_matrix

当我执行 my_matrix tmp = vec * mat 时,它返回一个矩阵(matmy_matrixvec 的实例my_vector 的实例)。我在这里很好。

但是当我执行 my_vector tmp = mat * vec 时,我在 clang++ 中得到这个错误:

no viable conversion from 'my_matrix' to 'my_vector'

g++ 中的这个错误:

conversion from 'my_matrix' to non-scalar type 'my_vector' requested

我想我知道问题出在哪里了。 matvec 相乘后,返回类型为 my_matrix 并且不能将基类转换为派生类.

您认为解决这个问题的方法是什么?

我尝试定义 void operator*(my_vector&, my_matrix&)(不是派生类的成员函数),它在派生类中调用 my_vector operator*(my_matrix&)类,但到目前为止还没有用。

class my_matrix{
public:
my_matrix operator*(my_matrix& other_mat){
my_matrix tmp(row, other_mat.col);
// for loop to matrix multiply that fill up the tmp
return tmp;
}
};

class my_vector:public my_matrix{
public:
// not sure if I need operator* here
// Somehow I want to bring the my_vector tmp = mat * vec; here so
// it would return vector instead of matrix
// I have tried : but not successful
// my_vector operator*(my_matrix&)
// void operator*(my_vector&, my_matrix&); (non member)
};

int main(){
my_matrix mat = {{1,2,3},{4,5,6}}; // 2x3
my_vector vec = {1,2,3}; // 3x1

my_vector tmp = mat * vec; // 2x3 * 3*1 gives 2x1 vector
}

最佳答案

尝试这样的事情:

class my_matrix {
public:
my_matrix operator*(const my_matrix& other_mat) const {
my_matrix tmp(row, other_mat.col);
// for loop to matrix multiply that fill up the tmp
return tmp;
}
};

class my_vector : public my_matrix {
public:
using my_matrix::operator*;

my_vector operator*(const my_vector& other_vec) const {
my_vector tmp(...);
// for loop to vector multiply that fill up the tmp
return tmp;
}
};

my_vector operator*(const my_matrix &lhs, const my_vector &rhs)
{
my_vector tmp(...);
// for loop to vector multiply that fill up the tmp
return tmp;
}

int main() {
my_matrix mat = {{1,2,3},{4,5,6}}; // 2x3
my_vector vec = {1,2,3}; // 3x1

my_vector tmp = mat * vec; // 2x3 * 3x1 gives 2x1 vector
}

关于c++ - 如何在对基类和派生类进行操作时返回派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com