Я не могу точно описать, что я хочу сказать, но хочу использовать функции базового класса с унаследованным типом. Например, я хочу объявить «оператор Coord3D + (Coord3D)»; в одном классе, но если я использую его с операндами Vector3D, я хочу, чтобы он возвращал тип Vector3D вместо Coord3D.Вызов функций базового класса с унаследованным типом
С этой строкой кода, приведенной ниже, я добавляю два вектора Vector3D и получаю команду Coord3D в ответ, как мне рассказала функция typeid(). Name(). Как мне реорганизовать мои классы, чтобы я получил Vector3D по возвращении?
#include <iostream>
#include <typeinfo>
using namespace std;
class Coord3D
{
public:
float x, y, z;
Coord3D (float = 0.0f, float = 0.0f, float = 0.0f);
Coord3D operator + (Coord3D &);
};
Coord3D::Coord3D (float a, float b, float c)
{
x = a;
y = b;
z = c;
}
Coord3D Coord3D::operator+ (Coord3D ¶m)
{
Coord3D temp;
temp.x = x + param.x;
temp.y = y + param.y;
temp.z = z + param.z;
return temp;
}
class Vector3D: public Coord3D
{
public:
Vector3D (float a = 0.0f, float b = 0.0f, float c = 0.0f)
: Coord3D (a, b, c) {};
};
int main()
{
Vector3D a (3, 4, 5);
Vector3D b (6, 7, 8);
cout << typeid(a + b).name();
return 0;
}
что вы ожидаете произойдет здесь, и что вы хотите, чтобы произошло – aaronman
я хочу Vector3Ds, чтобы иметь возможность добавлять друг друга, используя функции, полученные из Coord3D, но когда они добавляют, они превращаются в Coord3D вместо Vector3D. –
Вы должны определить 'operator +' в 'Vector3D', который возвращает' Vector3D' вместо 'Coord3D'. –