我无法准确描述我想说的内容,但我想使用具有继承类型的基类函数。就像我想声明“Coord3D operator +(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;
}
答案 0 :(得分:1)
您想要的功能在基类中,但它返回一个基类(这是有道理的,因为Coord3D
不知道Vector3D
是什么。如果你坚持不为operator+()
重写Vector3D
(我认为如果你计划进行乘法,那么这是公平的),你可以在Vector3D
中创建一个复制构造函数可以从Vector3D
结果构建Coord3D
的类。
class Vector3D: public Coord3D
{
public:
Vector3D (float a = 0.0f, float b = 0.0f, float c = 0.0f)
: Coord3D (a, b, c) {};
Vector3D (const Coord3D& param){ new ((Coord3D*)this) Coord3D(param); }
};
int main ()
{
Vector3D a (3, 4, 5);
Vector3D b (6, 7, 8);
Vector3D c = a + b;
cout << typeid(c).name();
Sleep(1000);
return 0;
}