2013-02-23 18 views
2

考慮下面的類:如何在C++中的基類和派生類之間共享一個通用的默認參數值?

class A { 
    public: 
    A(std::string param = "123") {} 
}; 

class B : public A{ 
    public: 
    B() : A() {} 
    B(std::string param) : A(param) {} 
}; 

是否有比這更好的方法,使從A確保默認參數值使用?我希望有人能夠通過提供一個字符串參數來構造B.

+0

我不知道如何做到這一點。你可以讓'A'抽象基類嗎? – seand 2013-02-23 04:03:30

+0

這種方法有什麼問題需要更好的方法? – Slava 2013-02-23 04:36:33

+0

精細的方法。優先使這種轉換構造函數「明確」。否則,隨機拼寫開始編譯。 – 2013-02-23 04:52:33

回答

2

取決於你到底想要什麼,這可能是最好的選擇(如果你想確保基本默認參數的變化會立即在派生型回升),否則你可以使用相同的方法,因爲你在基礎所做的:

class B : public A { 
public: 
    B(std::string const & arg = "123") : A(arg) {} 
// ... 

在這種情況下,你需要記住更新派生類型的默認值,如果你在基本類型更改值。你也可以將這個因素考慮爲一個常量:

const char* defaultParam = "123"; 
class A { 
public: 
    A(std::string const& s=defaultParam) // ... 
//... 
}; 
class B : public A { 
public: 
    B(std::string const& s=defaultParam) : A(s) {} 
//... 
相關問題