簡體   English   中英

靜態成員變量在C ++中如何表現出多態性?

[英]How does a static member variable behave with polymorphism in C++?

我想將靜態字符串存儲在子類中,以便它們不會在內存中重復。 可以這樣嗎? 我希望能夠實例化兩個IBM,但是只將字符串“ IBM”放入內存一次。

class Company {
    static const std::string company_name;
}
class CocaColaCompany : public Company {
    static const std::string company_name = "Coca Cola";
}
class IBM : public Company {
    static const std::string company_name = "IBM";
}

還是將靜態成員與多態基類一起使用是否存在問題?

靜態成員和類層次結構不交互。 多態性是關於單個實例的。

如果要使用特定於子類的公司名稱並在其中固定,則應使company_name在基類中成為虛擬獲取器,並在派生類中覆蓋它以返回固定的字符串。

就是說,您的小示例類層次結構令人擔憂,因為它混合了抽象級別。 無論CocaColaCompany也不IBM是改進Company ; 他們是特定的公司,因此應該是實例。 (這是“是”規則會使您誤入歧途的典型方式。)另一方面, CocaColaSubsidiary可能是Company的子類。

靜態成員和類層次結構不交互。 多態是關於更多的行為形式。 但是,您不能一次又一次地在類層次結構中聲明靜態成員。 應該聲明一次,並且可以在多態性的整個層次結構中使用它。

暫無
暫無

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

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