我已经检查了类继承语法,很确定我没有记错吗?有什么东西从我身上溜走了吗?

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

我得到的错误是

最佳答案

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

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

您的雇员类继承自person,但是它的构造函数仅接受一个参数,并且不使用其构造函数初始化基类。
employee( int _commission )
{
   commission= _commission;
}

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

您有两个选择。

首先,修改人员构造函数以不接受任何参数
person()

如果使用此方法,则不必更改您的员工类别的签名。

或者,您可以修改employee构造函数以采用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)对人员构造函数的调用。

雇员构造函数然后分配_commission的值,因为它的范围仅在雇员类中相关。

那有意义吗?

07-25 20:31