재담류의 구조 함수와 초기화(2)

1734 단어
기본 구조 함수에 대한 구덩이를 밟고 CPPP를 복습했다.
1 추상적인 데이터 형식은 데이터(클래스의 데이터 구성원)와 상태에 작용하는 조작(클래스의 구성원 함수)을 하나의 단원으로 간주한다.2 클래스의 대상을 만들기 전에 클래스를 완전하게 정의해야 한다.클래스를 정의해야 합니다. 성명 클래스만 있는 것이 아니라, 컴파일러가 클래스의 대상에게
상응하는 저장 공간을 미리 남기다.마찬가지로 인용이나 포인터 접근 클래스의 구성원을 사용하기 전에 클래스를 정의해야 합니다.
3 구조 함수는 특수한 구성원 함수로 유형이 클래스인 새로운 대상을 만들면 구조 함수를 집행한다.함수를 구성하는 작업은 모든 대상의 데이터 구성원이 적당한 초기 값을 가지도록 보장하는 것이다.
4 개념적으로 보면 구조 함수는 두 단계로 나뉘어 집행된다고 볼 수 있다. (1) 초기화 단계.(2) 계산 단계.
초기화는 초기화 목록을 사용하여 완료를 표시할 수 있습니다.계산 단계는 구조 함수 함수체 중의 모든 문장으로 구성된다.초기화는 계산 단계가 시작되기 전에 발생한다.
Sales 초기화 목록item::Sales_item(const string &book):isbn(book), units_sold(0), revenue(0.0)
클래스 형식의 데이터 구성원은 항상 초기화 단계에서 초기화됩니다. 구조 함수의 초기화 목록에 초기화를 표시하든지 말든지.
5 유형 클래스의 변수는 반드시 초기화 단계에서 초기화됩니다.만약 구조 함수의 초기화 목록에 이 변수의 초기화를 명시한다면, 이 값에 따라 초기화하고, 그렇지 않으면 기본 구조 함수를 호출하여 초기화합니다.내장되거나 복합 유형의 구성원의 초기 값은 대상의 역할 영역에 의존합니다.로컬 역할 영역에서는 이 구성원들이 초기화되지 않고, 전역 역할 영역에서는 이 구성원들이 0으로 초기화됩니다.
6 const나 인용 형식 구성원, 기본 구조 함수가 없는 클래스 형식의 구성원에게 초기화식을 사용해야 합니다.예를 들어, 다음 구조 함수가 잘못되었습니다.
class ConstRef {
public:
ConstRef(int ii);
private:
int i;
const int ci;
int &ri;
};
// no explicit constructor initializer: error ri is uninitialized
ConstRef::ConstRef(int ii)
{ // assignments:
i = ii; // ok
ci = ii; // error: cannot assign to a const
ri = i; // assigns to ri which was not bound to an object
}

그런데 다음 구조 함수가 맞아요.
ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii) { }

7 하나의 클래스가 구조 함수를 정의하지 않았을 때만 컴파일러가 자동으로 기본 구조 함수를 생성할 수 있다.
8 클래스가 내장되거나 복합 형식의 구성원을 포함한다면, 클래스는 이러한 구성원을 초기화하기 위해 자신의 구조 함수를 정의해야 하며, 컴파일러가 생성한 기본 구조 함수에 의존해서는 안 된다.
9 만약 동적 호출 구조 함수.
Sales_item *p = new Sales_item();

좋은 웹페이지 즐겨찾기