在派生类中使用基础构造函数的任何方法?

Jon*_*ood 6 c++ inheritance constructor

在过去的十年或二十年中使用C#之后,我的C++变得有点生疏了.

如果我有以下内容:

class CBase
{
public:
    CBase(LPCTSTR pszArg1, LPCTSTR pszArg2, LPCTSTR pszArg3);
    virtual ~CBase();

    // Etc...
};

class CDerived : CBase
{
    // Etc...
};
Run Code Online (Sandbox Code Playgroud)

看来我无法创建一个实例CDerived.

没有构造函数"CDerived :: CDerived"的实例与参数列表匹配

我知道我可以显式创建派生构造函数:

CDerived::CDerived(LPCTSTR pszArg1, LPCTSTR pszArg2, LPCTSTR pszArg3)
    : CBase(pszArg1, pszArg2, pszArg3)
{
}
Run Code Online (Sandbox Code Playgroud)

但这似乎是很多打字,特别是如果我打算从基类派生许多类.

基类仍然需要这些或那些参数.有没有办法不必为每个派生类重写这个参数,或者"暴露"基础构造函数,或者我必须像以前一样完全按照这样做?

son*_*yao 9

您可以使用继承构造函数(从C++ 11开始):

class CDerived : public CBase
{
public:
    using CBase::CBase;
    // Etc...
};
Run Code Online (Sandbox Code Playgroud)

那你可以

LPCTSTR pszArg1;
LPCTSTR pszArg2;
LPCTSTR pszArg3;
CDerived d(pszArg1, pszArg2, pszArg3); // initialize CBase subobject by CBase::CBase(LPCTSTR, LPCTSTR LPCTSTR), 
                                       // then default-initialize other members of CDerived
Run Code Online (Sandbox Code Playgroud)