我已经检查了类继承语法,很确定我没有记错吗?有什么东西从我身上溜走了吗?
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的值,因为它的范围仅在雇员类中相关。
那有意义吗?