派生类的构造函数

首先,应知道这一点:派生类不能直接访问基类的私有成员,必须通过基类的方法进行访问。

然而,派生类却从基类那里继承了基类的私有成员,这就导致,派生类的构造函数不能用一般类型的构造函数。这时候,可以用初始化列表:

Ratedplayer::Ratedplayer(unsigned int r,const string &fn,const string &ln,bool ht):TableTennisPlayer(fn,ln,ht)
{
	rating=r;
}

其中,TableTennisPlayer(fn,ln,ht)是初始化列表,他是可执行代码,调用TableTennisPlayer构造函数。这样,就避免了派生类不能访问基类私有成员的问题,另外,也可以使用这样的成员列表:

Ratedplayer::Ratedplayer(unsigned int r,const TableTennisPlayer &tp):TableTennisPlayer(tp)
{
	rating=r;
}
这里也将TableTennisPlayer的信息传递给了TableTennisPlayer构造函数:

TableTennisPlayer(tp)

由于tp的类型为TableTennisPlayer &,因此将调用基类的复制构造函数。基类没有定义复制构造函数,编译器将自定生成一个默认的复制构造函数,由于这个类没有使用动态内存分配,所以可以使用默认的复制构造函数。

如果省略成员初始化列表,

Ratedplayer::Ratedplayer(unsigned int r,const string &fn,const string &ln,bool ht)
{
	rating=r;
}
由于,必须首先创建基类对象,如果不调用基类构造函数,程序将使用默认的基类构造函数,因此,上述代码,与下面的等价:

Ratedplayer::Ratedplayer(unsigned int r,const string &fn,const string &ln,bool ht):TableTennisPlayer()
{
	rating=r;
}

除非要使用默认的构造函数,否则应显式调用正确的基类构造函数。

有关派生类构造函数的要点如下:

1)首先创建基类对象。

2)派生类构造函数应通过成员初始化列表将基类信息传递给基类构造函数。

3)派生类构造函数应初始化派生类新增的数据成员。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值