博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的组合 构造函数的用法
阅读量:5168 次
发布时间:2019-06-13

本文共 1422 字,大约阅读时间需要 4 分钟。

一个类中内嵌另一个类的对象作为数据成员,称为类的组合。该内嵌对象称为对象成员,或者子对象。如三角形类Triangle类的内嵌Node类作为数据成员;

class Triangle{private:    Node *nodei;  //对象成员    Node *nodej;    Node *nodem;public:    ...};

在使用过程中,需要着重注意的是 对象成员的初始化!如Triangle的构造函数该如何定义?

如果一个类具有内嵌对象,那么在它对象化的时候既要对基本数据成员初始化也要对内嵌的对象成员初始化。

class X{  类名1  对象成员名1;  类名2  对象成员名2;  ...  类名n  对象成员名n;};

一般来说类X的构造函数定义形式为:

X::X(形参表0):对象成员名1(形参1),...,对象成员名n(形参n){  类X的构造函数体}

形参1到n一般来自形参表0;而且当调用构造函数的时候,首先按照在类的声明中的顺序依次调用对象成员函数的构造函数,对这些对象初始化,最后执行够赞函数体初始化类中的其他数据成员;析构函数的调用顺序与构造函数相反!举例说明:

#include
using namespace std;class Node{private: double x_; double y_;public: Node(double x=0,double y=0) //带默认参数的构造函数 { x_=x; y_=y; cout<<"x="<
<

输出结果:

 

说明:如果类的内嵌对象是用指针表示的,如何初始化呢?这个时候用上述的初始化列表就失效了!

#include
using namespace std;class Node{private: double x_; double y_;public: Node(double x=0,double y=0) //带默认参数的构造函数 { x_=x; y_=y; cout<<"x="<
<

输出结果为:

显然这样定义构造函数既不直观(不知道那个参数对应那个点)也很麻烦!改为如下:

#include
using namespace std;class Node{private: double x_; double y_;public: Node(double x=0,double y=0) //带默认参数的构造函数 { x_=x; y_=y; cout<<"x="<
<

输出:

这样来定义构造函数既没有用到init()自定义的初始化函数,而且物理意义明确。

 

总结:1.有子对象的类的初始化问题。子对象不是直接用类名表示,可以用初始化列表初始化。

   2.如果子对象用指针形式表示,就不能用初始化列表了。

 

转载于:https://www.cnblogs.com/mt-luo/p/4162524.html

你可能感兴趣的文章
UESTC_Infected Land 2015 UESTC Training for Search Algorithm & String<Problem G>
查看>>
.Net 之 RPC 框架之Hprose(远程调用对象)
查看>>
全球外贸客户资源网站总汇
查看>>
杂项-CORS:CORS(跨域资源共享)
查看>>
杨柳目-杨柳科:杨柳科
查看>>
Node.js:JXcore
查看>>
redis如何进行分库存储和选择模糊清除缓存
查看>>
spring security退出方法
查看>>
从获得字符串中获取数字
查看>>
传入一个月份获取该月的统计信息
查看>>
分组取出值最大的数据
查看>>
java判断为空的方法
查看>>
double类型的数值转为小数点2位
查看>>
java比较两个时间年月份的大小
查看>>
服务器上配置JDK
查看>>
java后台生成APP和H5所需要支付宝订单
查看>>
接口传递的json后台如何获得值
查看>>
分页工具的使用
查看>>
如何在Linux启动jar 包
查看>>
微信支付java后台
查看>>