在创建派生类实例时提供基类构造函数参数

时间:2012-07-04 19:35:26

标签: c++ constructor polymorphism new-operator parent-child

在新建派生类实例时,有没有办法向基类提供构造函数参数? (也就是说,当基类构造函数具有这些参数的默认值时)

E.g。

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" );
};

这显然不起作用。有没有办法新建一个派生实例,并为它的基础提供一个构造函数参数,而不必在派生类构造函数中提供该参数。

2 个答案:

答案 0 :(得分:2)

  

是否有办法新建一个派生实例,并为其基础提供构造函数参数,而无需在派生类构造函数中提供该参数。

没有

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

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

无论您是否使用new,都会出现这种情况。

答案 1 :(得分: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) {};
};

或者将默认值传递给Derived类构造函数。

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