C ++:继承基类方法

时间:2012-11-21 19:56:08

标签: c++ oop

我有这个简单的代码:

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()但它不起作用:(

请帮帮我。谢谢:))

3 个答案:

答案 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;
    }
    ...