在非默认构造函数中使用默认构造函数

时间:2019-04-09 03:15:48

标签: c++ c++11

在重载构造函数时,是否可以有一个非默认构造函数调用默认构造函数,这样我就不会将代码从默认构造函数复制粘贴到任何以后的非默认构造函数中?还是不允许使用此功能的原因是什么?

这是我的代码:

class Test{
    private:
        int age;
        int createdAt;
    public:
        //Here is the defualt constructor.
        Test(){
            this->createdAt = 0;
        };
        //Non-default constructor calling default constructor.
        Test(int age){
            this->Test(); //Here, call default constructor.
            this->age = age;
        };
};

请注意,这段代码会引发编译器错误“ Test :: Test的无效使用”,因此我显然做错了。

感谢您的时间!

1 个答案:

答案 0 :(得分:3)

是的,可以在委托构造函数的帮助下进行。 此功能称为构造函数委托,是C ++ 11中引入的。

#include<iostream>  
using namespace std;
class Test{
    private:
        int age;
        int createdAt;
    public:
        //Here is the defualt constructor.
        Test(){            
            createdAt = 0;
        };

        //Non-default constructor calling default constructor.
        Test(int age): Test(){ // delegating constructor
            this->age = age;
        };

        int getAge(){
            return age;
        }

        int getCreatedAt(){
            return createdAt;
        }
};

int main(int argc, char *argv[]) {
    Test t(28);
    cout << t.getCreatedAt() << "\n";
    cout << t.getAge() << "\n";
    return 0;
}