[英]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.