编程学习资讯网

C++学习体会--构造函数初始化数据成员值的两条路--编程学习网

发布时间:2018-08-16 09:07:52   来源:本站编辑   浏览次数:

在编写一个应用时,我们会希望他们的变量,可以是指定的初始值。另外,在我需要的时候,当我定义相同的类但是不同的对象时,我可以设置其他的初始值。

 

复制代码
#include <iostream> using namespace std; class CBox
{ public: double m_Length{ 1.0 }; double m_Width{ 1.0 }; double m_Height{ 1.0 };

    CBox(double lv, double wv, double hv)//初始化路1:有实参赋予
    {
        cout << "Constrcurtor called." << endl;
        m_Height = hv;
        m_Length = lv;
        m_Width = wv;

    }

    CBox() = default; //初始化路2:无实参,也可以是CBox(){}; double volume()//计算体积
    { return m_Length*m_Height*m_Width;
    }
}; int _tmain(int argc, _TCHAR* argv[])
{

    CBox box1{ 10.0, 10.0, 10.0 };//有实参 CBox box2;//默认初始化

    cout << "Volume of box1=" << box1.volume() << endl; cout << "Volume of box2=" << box2.volume() << endl; return 0;
}
复制代码

 

结果:

 

分析:

当类实体化的时候,默认进入与其相同名字的构造函数,当实体化对象时,如果存在实参,则将初始值一一对应lv,wv,hv赋值;如果没有实参,则使用没有函数体的默认构造函数,初始值为1.0;

 

优化代码:

复制代码
#include <iostream> using namespace std; class CBox
{ public: double m_Length; double m_Width; double m_Height;

    CBox(double lv=1.0, double wv=1.0, double hv=1.0)// 将上面分开初始化的方式合并;
    {
        cout << "Constrcurtor called." << endl;
        m_Height = hv;
        m_Length = lv;
        m_Width = wv;

    }  double volume()
    { return m_Length*m_Height*m_Width;
    }
}; int _tmain(int argc, _TCHAR* argv[])
{

    CBox box1{ 10.0, 10.0, 10.0 }; CBox box2;

    cout << "Volume of box1=" << box1.volume() << endl; cout << "Volume of box2=" << box2.volume() << endl; return 0;
}
复制代码

 

编程学习网 http://www.javalearns.cn

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java