【发布时间】:2013-06-27 21:06:16
【问题描述】:
我无法准确描述我想说的内容,但我想使用具有继承类型的基类函数。就像我想声明“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;
}
【问题讨论】:
-
您希望在这里发生什么以及您希望发生什么
-
我希望 Vector3D 能够通过使用从 Coord3D 派生的函数相互添加,但是当它们添加时,它们会变成 Coord3D 而不是 Vector3D。
-
您必须在
Vector3D中定义一个operator+,它返回一个Vector3D而不是Coord3D。 -
你能在 Vector3D 中创建一个 operator+ 来调用基类吗?
-
所以我必须创建一个全新的函数,而不是基于 Coord3D 的函数?还有其他方法吗,因为第一种方法真的很冗长,有点违背 OOP 的目的。
标签: c++ class function inheritance