【发布时间】:2016-12-08 03:57:48
【问题描述】:
在过去一两年使用 C# 之后,我的 C++ 有点生疏了。
如果我有以下情况:
class CBase
{
public:
CBase(LPCTSTR pszArg1, LPCTSTR pszArg2, LPCTSTR pszArg3);
virtual ~CBase();
// Etc...
};
class CDerived : CBase
{
// Etc...
};
看来我无法创建CDerived 的实例。
没有构造函数“CDerived::CDerived”的实例与参数列表匹配
我知道我可以显式创建派生构造函数:
CDerived::CDerived(LPCTSTR pszArg1, LPCTSTR pszArg2, LPCTSTR pszArg3)
: CBase(pszArg1, pszArg2, pszArg3)
{
}
但这似乎需要大量输入,特别是如果我打算从基类派生许多类。
基类仍然以某种方式需要这些参数。有没有办法不必为每个派生类重写这个参数,也许“暴露”基本构造函数,或者我必须绝对总是像上面那样做?
【问题讨论】:
-
提供默认构造函数?
-
@NathanOliver:我的基类如何获得参数?
-
@JonathanWood:它没有。但是默认构造函数可以将自己的参数值传递给基类。
-
即使是组合而不是继承,不会出现同样的问题吗?
-
@NickyC:是的,如果包含的类型具有非默认构造函数。包含类需要显式构造函数才能将参数传递给包含类型的构造函数。
标签: c++ inheritance constructor