欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-26 10:27:28
C++学习体会--构造函数初始化数据成员值的两条路 在编写一个应用时,我们会希望他们的变量,可以是指定的初始值。另外,在我需要的时候,当我定义相同的类但是不同的对象时,我可以设置其他的初始值。 结果: 分析: 当类实体化的时候,默认进入与其相同名字的构造函数,当实体化对象时,如果存在实参,则将初始值 ......

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

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

 

#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;
}

 

结果:

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

 

分析:

当类实体化的时候,默认进入与其相同名字的构造函数,当实体化对象时,如果存在实参,则将初始值一一对应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;
}