1

有没有办法在新建派生类实例时为基类提供构造函数参数?(即当基类构造函数对这些参数有默认值时)

例如

class Base
{
public:
 Base::Base( string name = "" )
 : m_name( name ) {};

private
 string m_name;
};

class Derived : public Base
{
public:
 Derived::Derived() {};
};

然后我需要做这样的事情:

void main()
{
 Base* instance = new Derived( "Jeff" );
};

这显然是行不通的。有没有一种方法可以新建派生实例并为其基类提供构造函数参数,而不必在派生类构造函数中提供该参数。

4

2 回答 2

2

有没有一种方法可以新建派生实例并为其基类提供构造函数参数,而不必在派生类构造函数中提供该参数。

不。

您的派生类构造函数需要接受参数,并将它们显式传递给基类构造函数。

class Derived : public Base
{
public:
 Derived::Derived(string name) : Base(name) {};
};

无论您是否使用,情况都是new如此。

于 2012-07-04T19:37:34.337 回答
1

如果你想在基类中使用不同的名称,你就不能这样做。但是不同的名称不是标准,您可以使用传递常量文字来做到这一点:

class Base
{
public:
 Base::Base( string name = "" )
 : m_name( name ) {};

private
 string m_name;
};

class Derived : public Base
{
public:
 Derived::Derived() : Base ("Jeff")    {};
 Derived::Derived(string &name) : Base (name) {};
};

或将默认值传递给派生类构造函数。

class Derived : public Base
    {
    public:
     Derived::Derived(string name = "Jeff") : Base (name) {};
    };
于 2012-07-04T19:58:57.353 回答