簡體   English   中英

從派生類訪問私有成員

[英]Accessing private member from derived class

這可能是一個微不足道的問題。 有下面的代碼,

class message {
public:
    virtual void setMessage(const string& name, const int& age, const string& title) const;
    virtual void getMessage(const string& name) const;
private:
    void removeMessage(const string& name);
};

class test : public message {
public:
    using message::removeMessage;
};


int main()
{
    test t;
    t.removeMessage("_");

    while (1);
    return 0;
}

試圖將removeMessage () 作為測試類中的公共方法公開。 但這是錯誤的,

錯誤 C2876:“消息”:並非所有重載都可以訪問

如何將基類中的私有方法公開為派生類中的公共方法?

派生類永遠不能訪問私有成員。 如果您的意圖是讓派生類訪問基類的成員,則將這些成員設為 protected 或 public。

你不能。 私有意味着它只能在定義它的類中訪問,子類不符合此定義。 您可能需要protected關鍵字。

class message {
public:
    virtual void setMessage(const string& name, const int& age, const string& title) const;
    virtual void getMessage(const string& name) const;
protected: //use protected instead
    void removeMessage(const string& name);
};

class test : public message {
public:
    using message::removeMessage;
};


int main()
{
    test t;
    t.removeMessage("_");

    while (1);
    return 0;
}

Protected 可以概括為“私有的,但也可以在基類中訪問”。

暫無
暫無

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

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