C++调用基类的构造函数


基类的代码是

class base
{
public:
	base(int id);
	base(){};
	virtual void toString();
protected:
	int id;
};


base::base(int n)
{
	printf("base constructor!\n");
	id = n;
}

void base::toString()
{
	cout<<"my id is "<<id<<endl;
}

派生类声明

class derive:public base
{
public:
	derive(int id);
};

派生类构造函数实现一

derive::derive(int n)
{
	printf("derive constructor!\n");
}

这样就隐式调用了基类无参数的构造函数base()。这里要注意,如果派生类的构造函数是上面那样,而基类又没有无参数的构造函数,那么就会 产生编译错误。

就是说,派生类构造函数如果没有显式调用基类的构造函数,那么就会自动隐式调用基类的无参数的构造函数。


测试代码

	derive dd(6);
	dd.toString();

输出结果是

without para,base constructor!
derive constructor!
my id is 0


如果把基类的无参数的构造函数给去掉,那么就会产生编译错误。

../src/CTest.cpp: 在构造函数‘derive::derive(int)’中:
../src/CTest.cpp:43:21: 错误: 对‘base::base()’的调用没有匹配的函数
../src/CTest.cpp:43:21: 附注: 备选是:
../src/CTest.cpp:25:1: 附注: base::base(int)
../src/CTest.cpp:25:1: 附注:   备选需要 1 实参,但提供了 0 个
../src/CTest.cpp:9:7: 附注: base::base(const base&)
../src/CTest.cpp:9:7: 附注:   备选需要 1 实参,但提供了 0 个
make: *** [src/CTest.o] 错误 1




派生类构造函数实现二

derive::derive(int n):base(n)
{
	printf("derive constructor!\n");
}

这样显示调用了基类的构造函数base(n)。

验证代码

	derive dd(6);
	dd.toString();

输出结果

base constructor!
derive constructor!
my id is 6

貌似只能通过参数列表的形式 调用基类构造函数,

而不能在函数体内调用。


参考资料:

http://www.cnblogs.com/krisdy/archive/2009/06/11/1501390.html

C++ rudiment]基类和派生类的构造函数








  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值