Search code examples
c++c++11constructordefault-argumentsdelegating-constructor

argument's default value base on others


i want to achieve a class like this:

class A{
    int a;
    int b;
    int c;
    A():a(),b(),c(){};
    A(int ia,int ib,int ic=ia+ib):a(ia),b(ib),c(ic){};  //this is what i need
};

I want the ic's default value is caculated based on the ia and ib, the code here will get error when being compiled.

I wonder if there's a way to get something like this.

thanks.


Solution

  • Just add another constructor overload:

    A(int ia, int ib)
      : a(ia), b(ib), c(ia + ib) {}
    
    A(int ia, int ib, int ic)
      : a(ia), b(ib), c(ic) {}
    

    For more complex initialisation, you can avoid repetition using a C++11 delegating constructor:

    A(int ia, int ib)
      : A(ia, ib, ia + ib) {}
    
    A(int ia, int ib, int ic)
      : a(ia), b(ib), c(ic) {}