0

我有这个简单的代码:

class A {
public:
   string toString() const { return "A"; }
};

class B : public A {
public:
   string toString() const { // some code here }
};

我想toString()在 B 类中从 A 类继承并获取一些额外的值。在此示例中,将为:“AB”(A:来自 A 类,B:额外字符串)。

这在 Java 中很容易,但我不知道如何在 C++ 中进行。我的第一个想法是从toString()A 类中获取字符串并附加额外的字符串。所以,采取这个:我使用: static_cast<A>(const_cast(this))->toString()但它不会工作:(

请帮我。谢谢 :)

4

3 回答 3

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 扩展。

于 2012-11-21T19:58:08.903 回答
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.

于 2012-11-21T19:57:56.293 回答
1

首先,您可能希望 toString 是虚拟的。其次,要完成你想要的,你可以在 B::toString 中做这样的事情:

class B : public A
{
    ...
    virtual string toString() const
    {
        string s = A::toString();
        s += "B";
        return s;
    }
    ...
于 2012-11-21T20:00:34.657 回答