constructor 와 destructor 개요 (c + only)

3320 단어 Trackofconcept
원문http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/cplr374.htm constructor 와 destructor 개요(c + + only) 대상 의 초기 화 와 제 거 는 간단 한 데이터 구조 보다 복잡 합 니 다. 이 는 복잡 한 내부 데이터 구조 가 있 기 때 문 입 니 다. 데이터 와 행동 함 수 를 포함 합 니 다. Constructor 와 descctor 는 클래스 대상 을 만 들 고 없 애 는 특수 한 구성원 함수 입 니 다. Constructor 는 메모리 신청 을 호출 하여 대상 을 초기 화 할 수 있 습 니 다. Destruction 은 소각 과 방출 을 호출 할 수 있 습 니 다.메모리 자원 등 과 같 습 니 다. 다른 구성원 함수 와 마찬가지 로 constructor 와 destructor 는 클래스 내부 에서 설명 합 니 다. 그들 은 inline 또는 external 로 정의 할 수 있 습 니 다. Constructors 는 기본 매개 변 수 를 가 질 수 있 습 니 다. 다른 구성원 함수 와 달리 constructor 는 구성원 초기 화 목록 이 있 습 니 다. 아래 의 제한 조건 은 constructors 와 destructors: * Constructor 와 Destructor 에 적용 되 지 않 습 니 다.어떤 값 도 되 돌려 줄 수 없다 * 지침 과 인용 은 constructor 와 destructor 에 사용 할 수 없다. 그들의 주 소 는 * Constroctor 를 받 을 수 없 기 때문에 virtual * Constructor 와 destructor 는 static, const, 또는 volatile * Unions 는 constructor / destructor 가 있 는 대상 constructor 와 destructor 가 다른 구성원 함수 와 마찬가지 로 방문 을 지 킬 수 없다.문의 제한 (private / public / protected)예 를 들 어 protected constructor 를 설명 하면 하위 클래스 와 친구 만 이 클래스 대상 을 만 들 수 있 습 니 다. 클래스 대상 을 정의 할 때 Compiler 는 constructors 를 자동 으로 호출 합 니 다. 클래스 의 수명 주기 가 끝나 면 destructor 를 자동 으로 호출 합 니 다. Constructor 는 클래스 의 대상 이 아 닌 this 지침 으로 메모 리 를 신청 하지만 대상 이 필요 로 하 는 메모리 보다 많은 저장 공간 을 신청 할 수 있 습 니 다.단 필요 대상 은 메모리 가 필요 합 니 다. constructor 는 new 연산 자 를 정확하게 호출 할 수 있 습 니 다. 분석 할 때 destructor 는 constructor 가 신청 한 자원 을 자동 으로 방출 합 니 다. delete 연산 자 를 사용 하여 대상 을 방출 합 니 다. 하위 클래스 는 기본 클래스 constructor 나 destructor 를 계승 하거나 다시 불 러 오지 않 지만 하위 클래스 는 기본 클래스 의 constructor 와 destructor 를 호출 합 니 다. Destructor 는 virtual 로 설명 할 수 있 습 니 다. 로 컬 또는 로 컬 또는 destructor임시 클래스 대상 을 만 들 때 도 constructor 를 호출 합 니 다. 역할 영역 을 나 가면 destructor 가 호출 됩 니 다. constructor 나 destructor 에서 구성원 함 수 를 호출 할 수 있 습 니 다. 예 를 들 어 class A 에서 도 constructor / destructor 에서 virtual 함 수 를 직접 / 간접 적 으로 호출 할 수 있 습 니 다. 이 경우 호출 된 함 수 는 A 의 하위 클래스 가 아 닌 a 또는 A 의 기본 클래스 로 정 의 됩 니 다.예. 이렇게 하면 constructor 나 destructor 에서 초기 화 되 지 않 은 대상 에 접근 하 는 것 을 방지 합 니 다. 다음 예 는 다음 과 같 습 니 다.
#include
using namespace std;

class A {
public:
    virtual void f() { cout << "void A::f()" << endl; }
    virtual void g() { cout << "void A::g()" << endl; }
    virtual void h() { cout << "void A::h()" << endl; }
};

class B: public A {
public:
    virtual void f() { cout << "void B::f()" << endl; }
    B() {
        f();
        g();
        h();
    }
    ~B() {
        f();
        g();
        h();
    }
};

class C: public B {
public:
    virtual void f() { cout << "void C::f()" << endl; }
    virtual void g() { cout << "void C::g()" << endl; }
    virtual void h() { cout << "void C::h()" << endl; }
};

int main(int argc, char* argv[])
{
    c obj;

    return 0;
}
위의 예 출력 은: void B:: f () void A:: g () void A:: h () 입 니 다.만 든 대상 은 C 류 이지 만 B 의 constructor 는 C 에서 B 를 다시 불 러 오 는 함 수 를 호출 하지 않 았 습 니 다. constructor / destructor 에서 typeid 나 다이나믹 캐 스 트 조작 자 를 사용 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기