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)
但这似乎是很多打字,特别是如果我打算从基类派生许多类.
基类仍然需要这些或那些参数.有没有办法不必为每个派生类重写这个参数,或者"暴露"基础构造函数,或者我必须像以前一样完全按照这样做?
您可以使用继承构造函数(从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)