구조 함수의 이름은 클래스의 이름과 같고 반환 형식을 지정할 수 없습니다!!!인삼이 없거나 여러 개의 인삼을 정의할 수 있다
구조 함수는const
로 성명할 수 없습니다
클래스 형식의const 대상을 만들 때 일반적인 구조 함수를 실행하여 이const 대상을 초기화합니다.
초기화 목록(초기화식)의 구조 함수 포함
다른 어떤 함수와 마찬가지로 구조 함수는 이름, 형참표와 함수체를 가지고 있다.다른 함수와 달리 구조 함수도 하나의 구조 함수 초기화 목록을 포함할 수 있다
구조 함수 초기화 목록은 사칭으로 시작하고 쉼표로 구분된 데이터 구성원 목록으로 각 데이터 구성원 뒤에 원괄호에 놓인 초기화식이 있다.
구조 함수도 클래스의 내부나 외부에 정의할 수 있으며 구조 함수 초기화 목록은 성명에서 지정하지 않고 구조 함수의 정의에만 정의할 수 있다.
구조 함수 초기화 목록은 생략할 수 있으며 초기화 목록을 생략하고 구조 함수 체내에서 데이터 구성원에 대한 값을 부여하는 것은 합법적이다.그러나 const나 인용 형식의 구성원은 어떤 유형이든 구조 함수 초기화 목록에서 초기화해야 한다.그래서 초기화 목록이 있는 구조 함수를 사용해야 합니다 **
구조 함수 초기화 목록에 언급된 모든 구성원을 표시하지 않고 초기화 변수와 같은 규칙을 사용하여 초기화합니다.이 형식의 기본 구조 함수를 실행하여 클래스 형식의 데이터 구성원을 초기화합니다.내장되거나 유형에 맞는 구성원의 초기화 값은 대상의 역할 영역에 의존한다. 국부 역할 영역에서 이 구성원들은 초기화되지 않고 전역 역할 영역에서 0
으로 초기화된다.
모든 const나 인용 형식 구성원 및 기본 구조 함수가 없는 클래스 형식의 구성원에게 초기화식
을 사용해야 합니다
구성원이 초기화된 순서는 구성원의 순서를 정의하는 것이다.
일반적인 상황에서 구조 함수의 형삼을 사용하여 대상의 데이터 구성원이 아닌 초기화식의 집행 순서로 인한 어떠한 문제도 피할 수 있다
클래스 형식의const 대상을 만들 때 일반적인 구조 함수를 실행하여 이const 대상을 초기화합니다.
2. 구조 함수 초기화식
1. 초기화 목록이 있는 구조 함수
다른 어떤 함수와 마찬가지로 구조 함수는 이름, 형참표와 함수체를 가지고 있다.다른 함수와 달리 구조 함수도 하나의 구조 함수 초기화 목록을 포함할 수 있다
구조 함수 초기화 목록은 사칭으로 시작하고 쉼표로 구분된 데이터 구성원 목록으로 각 데이터 구성원 뒤에 원괄호에 놓인 초기화식이 있다.
구조 함수도 클래스의 내부나 외부에 정의할 수 있으며 구조 함수 초기화식은 성명에서 지정하지 않고 구조 함수의 정의에만 정의할 수 있다.
구조 함수 초기화 목록에 언급된 모든 구성원을 표시하지 않고 초기화 변수와 같은 규칙을 사용하여 초기화합니다.이 형식의 기본 구조 함수를 실행하여 클래스 형식의 데이터 구성원을 초기화합니다.내장되거나 유형에 맞는 구성원의 초기화 값은 대상의 역할 영역에 의존한다. 국부 역할 영역에서 이 구성원들은 초기화되지 않고 전역 역할 영역에서 0
클래스 구성원에게 초기화식을 제공하지 않으면 컴파일러는 구성원 형식의 기본 구조 함수를 은밀하게 사용합니다.만약 그 클래스에 기본 구조 함수가 없다면 컴파일러가 기본 구조 함수를 사용하려고 시도하면 실패할 것입니다.이때 데이터 구성원을 초기화하기 위해서는 초기화식을 제공해야 한다.
일부 구성원은 구조 함수 초기화 목록에서 초기화해야 한다.이런 구성원들은 구조 함수 함수체에서 그들에게 값을 부여하는 데 작용하지 않는다.기본 구조 함수가 없는 클래스 형식의 구성원, const나 인용 형식의 구성원, 어떤 종류든지 구조 함수 초기화 목록에서 초기화해야 합니다.(const와 인용 형식은 정의할 때 초기화해야 하며 뒤에 값을 부여할 수 없습니다)
내장 유형의 구성원은 은밀하게 초기화하지 않기 때문에 이 구성원에 대해 초기화하든 값을 부여하든 상관없는 것 같다.비클래스 유형의 데이터 구성원에 대해 값을 부여하거나 초기화식을 사용하는 것은 결과와 성능에 있어서 모두 등가이다.
const 대상이나 인용 형식의 대상은 초기화할 수 있으나 값을 부여할 수 없습니다. 구조 함수의 함수체를 실행하기 전에 초기화를 완료해야 합니다.초기화의 유일한 기회는 구조 함수 초기화 목록에 있습니다.(모든 구성원을 언급하지 않아도 기본 초기화 형식을 사용합니다.)
//
class ConstRef{
public:
ConstRef(int ii);
private:
int i;
constint ci;
int &ri;// 。ri
};
ConstRef::ConstRef(int ii){
i=ii;//
ci=ii;// !!! const
ri=i;// !!!ri
}