派生类构造函数小疑点
派生类构造函数小问题
如果我哪句话错误了请指正,谢谢。
派生类的对象创建时,以此运行基类构造函数、派生类构造函数。删除该对象时依次执行派生类析构函数、基类析构函数。是这样的吗?
------解决方案--------------------
第二段代码中,下面的话严格地说是不对的。
//派生类构造函数。其将n这个参数赋值给了base类,也就是说n是个基类的对象?
D (int n):Base(n)的意思:
1. 因为要创建派生类对象,首先要调用基类构造函数,而基类Base由于已经自定义了一个构造函数,因此,它就不再存在缺省的构造函数了,因此在这里要制定基类的构造函数,否则派生类无法构造;
2. Base(n)在这里的意思是,向基类的构造函数传递一个int类型的参数。
3. 楼主举的这个例子情况有点特别。Base的构造函数只有一个int参数,那么就可以将int隐式地转换成Base类型的数据,关于这一点你可以参考下面这篇文章:
隐式类型转换和explicit关键字的作用
如果我哪句话错误了请指正,谢谢。
派生类的对象创建时,以此运行基类构造函数、派生类构造函数。删除该对象时依次执行派生类析构函数、基类析构函数。是这样的吗?
- 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关键字的作用