C++의 기본 생성자와 기본 키워드
이 기사에서는 C++의 기본 생성자와 새로 도입된 default
키워드에 대해 설명합니다.
먼저 C++의 기본 생성자에 대해 알아봅시다. 기본 생성자는 인수가 없고 클래스의 데이터 멤버에 기본값을 설정하는 데 사용되는 특별한 종류의 생성자입니다.
예:
class demo {
int age;
int id;
public:
demo() {
age = 10;
id = 1;
}
};
C++의 Default
키워드 및 기본 함수
C++ 11 버전은 =default
지정자의 도움으로 기본 함수를 명시적으로 선언하는 새로운 형태의 함수 선언 방식을 도입했습니다. 함수 선언 끝에 이것을 추가하여 기본 함수를 명시적으로 선언할 수 있습니다.
함수를 명시적으로 기본값으로 설정하면 컴파일러가 기본 구현을 생성하도록 강제하므로 이점이 있습니다. 그리고 효율성 측면에서 수동으로 구현한 기능보다 낫습니다.
예를 들어 클래스
에서 매개변수화된 생성자를 생성할 때 컴파일러는 프로그램에서 기본 생성자를 생성하거나 추가하지 않습니다. 이러한 경우 =default
를 사용하여 기본 생성자를 만들 수 있습니다.
예제 코드:
#include <bits/stdc++.h>
using namespace std;
class demo {
public:
int x;
demo(int temp) // parameterized constructor
{
x = temp;
}
demo() = default;
};
int main() {
demo d; // uses default constructor
demo d2(200); // uses parameterized constructor
}
매개변수화된 생성자 다음에 =default
지정자를 사용하여 컴파일러가 생성자의 기본 버전을 생성하도록 강제한 것을 볼 수 있습니다. 그리고 =default
를 사용할 때 생성자의 본문을 지정할 필요가 없다는 것을 알 수 있습니다.
함수의 {}
(빈 본문)을 사용하는 것보다 =default
를 사용하는 또 다른 이유는 코드의 가독성을 높이기 위함입니다.
=default
지정자를 처리할 때 한 가지 규칙은 함수에 기본 인수가 없어야 한다는 것입니다. 기본 생성자, 복사 생성자 또는 소멸자와 같은 특수 멤버 함수만 기본값으로 설정할 수 있습니다.
예제 코드:
#include <bits/stdc++.h>
using namespace std;
class demo {
public:
int add() = default;
demo(float, float) = default;
demo(int = 0) = default;
};
int main() {
demo d2(200, 300); // uses parameterized constructor
}
출력:
[Error] 'int demo::add()' cannot be defaulted
[Error] 'demo::demo(float, float)' cannot be defaulted
[Error] 'demo::demo(int)' cannot be defaulted
위의 이유는 첫 번째 함수와 두 번째 함수인 add()
와 demo(float,float)
가 특수 멤버 함수가 아니고 세 번째 함수인 demo(int = 0)
에 일부 멤버 함수가 있기 때문에 작동하지 않습니다. 기본 인수. 따라서 이러한 기능은 =default
를 사용하여 기본값을 설정할 수 없습니다. 따라서 컴파일 오류가 발생합니다.