类继承代码不起作用

class inheritance code not working

本文关键字:不起作用 代码 继承      更新时间:2023-10-16

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

   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":没有合适的默认构造函数可用

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

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

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

employee( int _commission )
{
   commission= _commission;
}

这是一个问题,当你创建员工的实例时,它也试图调用person类构造函数。由于您没有默认构造函数(同样,没有参数),因此需要显式调用employee构造函数中的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构造函数的调用。

employee构造函数然后分配_commission的值,因为它的作用域仅在employees类中相关。

这有道理吗?

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

person( int apersonid, string apersonname, string apersonadress )

因此,您需要自己定义一个默认构造函数。例如

person() {}

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