What is the member variables list after the colon in a constructor good for?

前端 未结 8 1034
予麋鹿
予麋鹿 2020-12-11 02:34

I\'m reading this C++ open source code and I came to a constructor but I don\'t get it ( basically because I don\'t know C++ :P )

I understand C and Java very well.

8条回答
  •  無奈伤痛
    2020-12-11 02:55

    The most common case is this:

    class foo{
    private:
        int x;
        int y;
    public:
        foo(int _x, int _y) : x(_x), y(_y) {}
    }
    

    This will set x and y to the values that are given in _x and _y in the constructor parameters. This is often the best way to construct any objects that are declared as data members.

    It is also possible that you were looking at constructor chaining:

    class foo : public bar{
        foo(int x, int y) : bar(x, y) {}
    };
    

    In this instance, the class's constructor will call the constructor of its base class and pass the values x and y.

    To dissect the function even further:

    TransparentObject::TransparentObject( int w, int x, int y, int z ) : 
       _someMethod( 0 ),
       _someOtherMethod( 0 ),
       _someOtherOtherMethod( 0 ),
       _someMethodX( 0 ) 
    {
         int bla;
         int bla;
    }
    

    The ::-operator is called the scope resolution operator. It basically just indicates that TransparentObject is a member of TransparentObject. Secondly, you are correct in assuming that the body of the constructor occurs in the curly braces.

    UPDATE: Thanks for the answers. May those be called methods? ( I guess no ) and what is the difference of call them within the constructor body

    There is much more information on this subject than I could possibly ever give you here. The most common area where you have to use initializer lists is when you're initializing a reference or a const as these variables must be given a value immediately upon creation.

提交回复
热议问题