假设我有两个类,如下所示:
Class A
{
public:
..
private:
int length;
}
Class B: public Class A
{
public:
..
private:
float length;
}
我想知道的是:
有一个类可以满足我的需求,我想重用它。但是,对于我的程序需求,其数据成员应该是另一种类型。
我有一些书,但它们都只是指覆盖基类成员方法。
答案 0 :(得分:7)
您可以使用模板化成员,即通用成员,而不是覆盖成员。
你也可以像工会一样声明VARIANT(COM)。
struct MyData
{
int vt; // To store the type
union
{
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
.
.
}
};
答案 1 :(得分:3)
1)不,你不能。您可以创建自己的内部/隐藏/私人成员,但不能覆盖它们。
2)如果可以,那不是一个好习惯。想一想;)
3)你不应该,因为你正在改变成员的意思。
答案 2 :(得分:3)
虽然在派生类中声明具有相同名称的数据成员是合法的C ++,但它可能不会按照您的意图执行。在您的示例中,A类中的任何代码都无法查看float length
定义 - 它只能访问int length
定义。
只有方法可以在C ++中具有虚拟行为,而不是数据成员。如果您希望将现有类重用为其他数据类型,则必须使用所需的数据类型重新实现该类,或者将其重新实现为模板,以便在实例化时提供所需的数据类型。
答案 3 :(得分:0)
1)是的,允许,你可以这样做
2)不!糟糕的做法。如果有人调用使用'length'的方法,则返回的变量将是未定义的。
3)尝试不同的设计。也许你想拥有一个类似命名的函数或者使用baseclass作为“has-a”类而不是“is-a”类。