При перегрузке конструкторов возможно ли, чтобы конструктор не по умолчанию вызывал конструктор по умолчанию, чтобы я не копировал код из конструктора по умолчанию в любые более поздние конструкторы не по умолчанию? ИЛИ по какой причине не разрешена эта функция?
Вот мой код:
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», поэтому я явно делаю что-то неправильно.
Спасибо за ваше время!
С++ 11 - Делегирование конструкторов.. это ключевые слова, по которым вы можете искать.. stackoverflow.com/q/13961037/1462718
Кстати, нет необходимости в this->
в this->createdAt
. createdAt= 0;
работает нормально. В большинстве современных компиляторов вы можете поставить int createdAt= 0;
, так что в этом тоже нет необходимости.
Обратите внимание, что вы не инициализируете age в конструкторе по умолчанию; это исчезнет, если вы поставите int age= 0;
@mirko, спасибо за ответы. Я намеренно не инициализировал age
. Это просто тестовая программа для себя. Но спасибо за заботу!
Да, это возможно с помощью делегирующего конструктора. Эта функция, называемая делегированием конструктора, была введена в 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;
}