我有这个简单的代码:
class A {
public:
string toString() const { return "A"; }
};
class B : public A {
public:
string toString() const { // some code here }
};
我希望B类中的toString()
将继承自A类并获取一些额外的值。在这个例子中,将是:“AB”(A:来自A类,B:额外的字符串)。
这在Java中很容易,但我不知道如何在C ++中做。我的第一个想法是从A类中的toString()
获取字符串并附加其他字符串。所以,采取这个:我使用:static_cast<A>(const_cast(this))->toString()
但它不起作用:(
请帮帮我。谢谢:))
答案 0 :(得分:4)
class A {
public:
string toString() const { return "A"; }
};
class B : public A {
public:
string toString() const { return A::toString() + "B"; }
};
在MS实现中(在Windows上)你可以改为__super :: toString(),但这是一个非便携的MS扩展。
答案 1 :(得分:2)
string B::toString() const {
string result = A::toString(); // calls the member method in A
// on the current object
result += "B";
return result;
}
对函数调用的限定将确定将调用哪个函数覆盖(如果函数是多态的),因此它确保动态调度不会再次调度到B::toString()
。与Java的主要区别在于,因为C ++允许多重继承,所以您必须为基础A::
命名,而不是仅仅调用super
。
答案 2 :(得分:1)
首先,您可能希望toString是虚拟的。其次,为了实现你想要的,你可以在B :: toString中执行类似的操作:
class B : public A
{
...
virtual string toString() const
{
string s = A::toString();
s += "B";
return s;
}
...