2013-02-23 60 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) {} 
//... 
相关问题