簡體   English   中英

C ++:繼承基類方法

[英]C++: inherit base class Method

我有這個簡單的代碼:

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

請幫我。 謝謝 :)

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

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

首先,您可能希望toString是虛擬的。 其次,要完成所需的操作,可以在B :: toString中執行以下操作:

class B : public A
{
    ...
    virtual string toString() const
    {
        string s = A::toString();
        s += "B";
        return s;
    }
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM