加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C嵌套构造函数初始化类成员

发布时间:2020-12-16 10:50:56 所属栏目:百科 来源:网络整理
导读:是否可以初始化这样的类? Quaternion::Quaternion(){ //default without arguments Quaternion(0.,V3(0.,0.,0.));}Quaternion::Quaternion(double s,V3 v){ //with scalar and vector as a argument coords[0] = s; coords[1] = v[0]; coords[2] = v[1]; co
是否可以初始化这样的类?

Quaternion::Quaternion(){ //default without arguments
    Quaternion(0.,V3(0.,0.,0.));
}


Quaternion::Quaternion(double s,V3 v){ //with scalar and vector as a argument
    coords[0] = s;
    coords[1] = v[0];
    coords[2] = v[1];
    coords[3] = v[2];
}

因为这是输出:

QUATERNION TEST
(2.122e-313:-3.22469e-232:2.122e-313:-1.998) //instanciated with Quaternion q;
(4:1:2:3) // instanciated with the Quaternion q(4,1,2,3);
(4:-1:-2:-3) // conjugated of the one above

并且第一个没有初始化为0.因为它应该是……为什么?

解决方法

不在C 03中,但最近的C版本允许委托构造函数:

Quaternion() : Quaternion(0.0,V3(0.0,0.0,0.0)) { }

在委托构造函数中,初始化列表必须只有一个元素,这是另一个构造函数(显然不能有任何循环引用).

如果你想直接在构造函数中初始化你的类成员,那么在C-11之前你并没有真正解决复制/粘贴问题.也许您想使用默认参数?有些人反对那些……

explicit Quaternion(double s = 0.0,V3 v = V3(0.0,0.0)) { /* ... */ }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读