读书人

派生类构造函数小疑点

发布时间: 2012-03-31 13:13:26 作者: rapoo

派生类构造函数小问题
如果我哪句话错误了请指正,谢谢。

派生类的对象创建时,以此运行基类构造函数、派生类构造函数。删除该对象时依次执行派生类析构函数、基类析构函数。是这样的吗?

C/C++ code
class B //基类{protected :     int amount ;public:    B (int n=0):amount(n){};//基类的带初始化列表的构造函数。其将 参数0 赋值给 变量amount .}


C/C++ code
class D : public B//public 继承了基类B{ public:    D (int n):Base(n){};//派生类构造函数。其将n这个参数赋值给了base类,也就是说n是个基类的对象?}


[解决办法]
第二段代码中,下面的话严格地说是不对的。
//派生类构造函数。其将n这个参数赋值给了base类,也就是说n是个基类的对象?

D (int n):Base(n)的意思:
1. 因为要创建派生类对象,首先要调用基类构造函数,而基类Base由于已经自定义了一个构造函数,因此,它就不再存在缺省的构造函数了,因此在这里要制定基类的构造函数,否则派生类无法构造;
2. Base(n)在这里的意思是,向基类的构造函数传递一个int类型的参数。

3. 楼主举的这个例子情况有点特别。Base的构造函数只有一个int参数,那么就可以将int隐式地转换成Base类型的数据,关于这一点你可以参考下面这篇文章:
隐式类型转换和explicit关键字的作用

读书人网 >C++

热点推荐