我无法准确描述我想说的内容,但是我想使用具有继承类型的基类函数。就像我要声明“ 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 &param){ 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;} 最佳答案 所需的功能在基类中,但是它返回基类(这很有意义,因为Coord3D不知道Vector3D是什么)。如果您坚决不为operator+()改写Vector3D(我认为如果您打算进行乘法等也很合理),则可以在Vector3D类中创建一个副本构造函数,该构造函数可以构造一个来自Vector3D结果。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;}关于c++ - 调用具有继承类型的基类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17353175/
10-09 13:34