C++의 6 개 함수

4647 단어 C++함수.
구조 함수
   C++에서 구조 함 수 는 6 개 함수 중 첫 번 째 입 니 다.한 대상 이 생 성 되 었 을 때 전체 주기 에서 생 에서 죽 는 과정 입 니 다.즉,구조 함수 생 성 대상,구조 함수 분석 대상 입 니 다.대상 이 생 성 되 었 을 때 구조 함수 로 대상 을 만 듭 니 다.이것 은 대상 의 생 성 과정 입 니 다.C++에서 대상 을 만 들 때 구조 함수 로 대상 을 만들어 야 합 니 다.클래스 에 기본 구조 함수 가 있 습 니 다.물론 구조 함수 로 대상 을 만 들 고 데 이 터 를 초기 화 할 수도 있 습 니 다.아래 의 예 를 보십시오.

class Base 
{
  public:
    Base()
    {}
    Base(int a=0):num(a)
    {}
    Base(int a=0,int b=0):num(a),age(b)
    {}
    Base(int a=0,int b=0,double c=0.0):num(a),age(b),slaroy(c)
    {}
  private:
    int num;
    int age;
    double slaroy;
};
위의 구조 함수 에서 구조 함 수 는 반드시 클래스 이름과 같 아야 한다.구조 함 수 는 유형 이 없다.첫 번 째 구조 함 수 는 기본 적 인 구조 함수 이 고 두 번 째 구조 함 수 는 한 데이터 구성원 만 초기 화 하 며 다른 데이터 구성원 은 무 작위 값 이다.두 번 째 구조 함 수 는 두 데이터 구성원 을 초기 화 하 는 것 이 고 다른 데이터 구성원 은 무 작위 값 입 니 다.세 번 째 구조 함 수 는 모든 데이터 구성원 을 초기 화 하 는 것 이다.
2.석조 함수
   C++에서 구조 함 수 는 대상 을 만 들 때 분석 함 수 는 이 대상 이 삶 에서 죽음 으로 가 는 사망 과정 입 니 다.또한 분석 함수 도 분석 대상 을 분석 할 때 이미 분 배 된 메모리 공간 을 회수 할 수 있다.

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
};
        분석 함 수 는 위 에서 보 듯 이 유형 이 없고 매개 변수 가 없 으 며 반환 값 이 없습니다.만약 에 구조 대상 이 공간 적 으로 메모리 의 분 배 를 하지 않 았 을 때
분석 함 수 는 기본 적 인 분석 함수 와 같이 메모리 의 분 배 를 진행 할 때 한 대상 이 분석 되 었 을 때 분 배 된 메모 리 를 회수 해 야 합 니 다.그렇지 않 으 면 메모리 가 누 출 될 수 있 습 니 다.
3.복사 구조 함수
  C++에서 구조 함수 에서 메모 리 를 신청 하 는 동작 이 있 고 다른 함수 에서 대상 의 복사 가 나타 나 면 구조 함 수 를 복사 해 야 합 니 다.

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    Base(const Base &s)
    {
     p= new char[strlen(s.p)+1];
     strcpy(p,s.p);
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
}; 
int main()
{
  Base a;
  Base b(a);
  return 0;
}
       주 함수 에 대상 에 대한 복사 할당 값 이 나 타 났 기 때문에 복사 구조 함수 가 필요 합 니 다.복사 구조 함수 가 없 으 면 기본 값 을 사용 합 니 다.
구조 함 수 를 복사 합 니 다.이때 얕 은 복사 가 진행 되면 분석 함수 가 메모리 에 중복 방출 되 는 오류 가 발생 할 수 있 습 니 다.그러면 이 때 는 딥 카피 가 필요 합 니 다.
작업,복사 구조 함 수 를 다시 작성 하여 대상 을 복사 합 니 다.복사 구조 함 수 를 작성 할 때 매개 변 수 는'&'참조 전달 이 어야 합 니 다.그렇지 않 으 면
문법 오류 입 니 다.
4.할당 함수
   C++에서 할당 함 수 는 네 번 째 함수 입 니 다.구조 함수 에서 메모 리 를 신청 하 는 작업 이 있 고 다른 프로그램 에서 두 개의 대상 이 직접 또는 간접 적 으로 있 습 니 다.
할당 작업 을 하려 면 할당 함수 가 필요 합 니 다.

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    Base(const Base &s)
    {
     p= new char[strlen(s.p)+1];
     strcpy(p,s.p);
    }
    Base& operator=(const Base &s)
    {
      if(&s==this)
       return *this;
      delete[] p;
      p= new char[strlen(s.p)+1];
      strcpy(p,s.p);
      return *this;
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
}; 
int main()
{
  Base a,c;
  Base b(a);
  c=a;
  return 0;
}
     주 함수 에서 대상 의 할당 작업 이 진행 되 었 기 때문에"="연산 자 를 다시 불 러 오지 않 으 면 같은 메모리 가 두 번 방출 됩 니 다.
조작 오류.'='리 셋 작업 에서 포인터 작업 과 관련 되면 두 대상 이 같은 대상 인지 아 닌 지 를 판단 해 야 합 니 다.그렇지 않 으 면 자체 할당 작업 입 니 다.
바늘 을 놓 는 작업 을 할 때 오류 가 발생 할 수 있 습 니 다.그리고 delete 로 기 존의 메모리 자원 을 방출 해 야 합 니 다.그렇지 않 으 면 메모리 가 누 출 될 것 입 니 다.
5.일반 대상 에 대한 주소 지정 함수
  C++에서 일반 대상 에 대한 주소 지정 함 수 는 다섯 번 째 함수 입 니 다.

class Base
{
  public:
    Base* operator&()
    {
     return this;
    }
}; 
일반 대상 의 주소 지정 함 수 는 이 대상 의 주 소 를 직접 되 돌려 주 고 주 소 를 찾 습 니 다.
6.대상 에 대한 주소 지정 함수
  C++에서 일반 대상 에 대한 주소 지정 함 수 는 여섯 번 째 함수 입 니 다.

class Base
{
  public:
    const Base* operator&() const
    {
     return this;
    }
};
   일반 대상 의 주소 지정 함수 도 이 일반 대상 의 주 소 를 직접 되 돌려 주 며 주 소 를 찾 습 니 다.

좋은 웹페이지 즐겨찾기