Я пытался сделать виртуальный оператор на C ++
class Data
{
virtual Matrix operator* (Matrix &_matrix);
virtual Scalar operator* (Scalar &_scalar);
};
class Matrix : public Data
{
private:
vector<vector<double>> data;
public:
// ...
Matrix operator* (Matrix &_matrix);
};
class Scalar : public Data
{
private:
double data;
public:
// ...
Scalar operator* (Scalar &_scalar);
};
И проблема была, когда я создал Data * Array, как показано ниже
Data* arr[10];
arr[0] = new Matrix(3,3);
arr[1] = new Matrix(3,3);
arr[0]->operator*(arr[1]);
Я не мог сделать умножение между этими двумя матрицами, так как я не могу передать Data в качестве аргумента.
Но проблема в том, что я не могу сделать аргумент функции для получения типа Data *, потому что он не сможет получить доступ к закрытым членам объектов Matrix или Scalar.
Как справиться с такой странной ситуацией?