类继承代码不起作用

时间:2015-11-05 16:53:48

标签: c++ constructor

我检查了类继承语法,我很确定我没有错误?做了什么从我身边溜走了?

   class person
{
public:
int personid;
string personname;
string personadress;
person( int apersonid, string apersonname, string apersonadress )//constructor
{
    personid=apersonid;
    personname=apersonname;
    personadress=apersonadress;
}
int getpersonid()
{
    return personid;
}
string getpersonname()
{
    return personname;
}
string getpersonadress()
{
    return personadress;
}
 };

class employee: public person
 {
 public:
int commission;
employee(int _commission, int apersonid, string apersonname, string apersonaddress) : person(apersonid, apersonname, apersonaddress)
{
    commission= _commission;
}
int getcommission()
{
    return commission;
    }
 };

我得到的错误是

  

错误1错误C2512:'person':没有合适的默认构造函数   可用

2 个答案:

答案 0 :(得分:2)

我怀疑你的问题是你的基类没有定义默认构造函数(带有0个参数)。相反,你有一个带有多个参数的构造函数。

person( int apersonid, string apersonname, string apersonadress )//constructor
{
    personid=apersonid;
    personname=apersonname;
    personadress=apersonadress;
}

您的员工类继承自人,但它的构造函数只接受一个参数,并且不使用它的构造函数初始化基类。

employee( int _commission )
{
   commission= _commission;
}

当您创建员工实例时,这是一个问题b / c,它也试图调用人员类构造函数。由于您没有默认构造函数(同样没有参数),因此您需要在员工构造函数中显式调用person构造函数。

您有两种选择。

首先,修改person构造函数以不带参数

person()

如果您使用此方法,您的员工类的签名将不会发生变化。

或者您可以修改员工构造函数以获取人员构造函数所需的所有参数:

class employee: public person
{
   public:
   int commission;

   employee(int _commision, int apersonid, string apersonname, string apersonadress ) : person(apersonId, apersonname, apersonadress)
   {
      commission = _commission;
   }
   int getcommission()
   {
      return commission;
   }
};

在构造函数中,冒号(:)之后的代码是使用指定的参数(apersonid,apersonname,apersonadress)调用person构造函数。

然后,员工构造函数会分配_commission的值,因为它的范围仅与员工类相关。

这有意义吗?

答案 1 :(得分:1)

在C ++中,如果为类显式定义了构造函数,但它们都是非默认的,则编译器不会隐式定义默认构造函数,从而导致类没有默认构造函数。您已在类中定义了一个非默认构造函数,即:

person( int apersonid, string apersonname, string apersonadress )

所以你需要自己定义一个默认构造函数。 E.g。

person() {}

请记住,在这种情况下,当您构造employee类的对象时,将调用person的默认构造函数。如果不需要,则需要在person的构造函数中调用employee的非默认构造函数。