스마트웹앱콘텐츠전문가/C++

함수

9D4U 2019. 1. 9. 15:05
728x90
반응형

 정의 :

반환되는_데이터의_형 함수의_이름 <- 

(인자의_목록){

/*함수의 내부 변수의 선언*/

/* 함수의 구현 내용*/

/* return 반환값;*/

}

 - 값에 의한 호출 : 

 - 참조에 의한 호출 : 


 - 인라인(inline) 함수 : 프로그램의 실행 속도를 빠르게 하기 위한 함수.

형식 : inline 함수타입 함수명{ 실행할 내용 }

 - 디폴트 인수 : 디폴트 인수는 오른쪽 부터 순서대로 지정함.

  예시) void swap(int x, int y, int w=10, int h=20);


 - 오버로딩(overloading) : 서로 다른 여러 개의 함수가 동일한 이름으로 정의 되는 것. = 함수의 이름은 동일하지만 인수의 개수나 타입을 다르게 함.

 

 [클래스와 객체]

 ○ 클래스 : 객체를 찍어내기 위한 틀

   형식 : class 이름{ 접근 지정자; 멤버 변수; 멤버 함수;}

 ○ 객체 : 프로그램 구성하는 독립적인 부품, 실세계와 시스템을 추상화한 것.


 ○ 클래스란 구현하고자 하는 것의 설계도이며, 객체는 클래스의 내용을 실체화 한 것.


 - 접근 지정자 : 클래스의 멤버 변수나 멤버 함수들의 접근 가능성을 설정하는 키워드(private, protected, public 등 존재)


 ○ 일반적으로 클래스 생성 시, 멤버 변수는 데이터 은닉을 위해 private 부분에 선언하고 멤버 함수들은 public 부분에 선언함.

 ※ cpp(소스파일)의 내용을 헤더파일(.h)과 분할된 소스파일(.cpp)로 분할구현하기.

  : 헤더 파일에 클래스 선언(Date 클래스) + Date.cpp(헤더파일에서 선언된 Date클래스 멤버 함수르 구현) + main.cpp(메인 함수를 구현) 

 ※ 클래스 멤버 함수 구현 시 '::'은 사용 범위 결정 연산자로 해당 멤버 함수가 어느 클래스에 속하는 지 나타나기 위해 사용

  예시) Date::GetDate() <- 클래스명::멤버 함수명


 ○ 생성자와 소멸자

 - 프로그램이 데이터 멤버에 접근할 수 있는 방법은 멤버 함수를 이용하는 것이므로, 객체를 초기화하기 위해 '생성자'라는 함수가 필요함.

 - 객체가 소멸하기 전 객체의 흔적을 지우기 위해 '소멸자'라는 함수가 사용됨.

● 생성자(Constructor)

- 객체가 생성될 떄, 자동으로 치기화 될 수 있도록 설계해야 함 -> c++에서는 새로운 객체가 생성될 떄 객체의 데이터 멤버 값을 초기화시킬 수 있는 

  클래스 생성자라는 특별한 멤버 함수를 제공함.

  생성자는 컴파일러에 의해 호출되므로 생성자의 이름은 클래스의 이름과 같도록 정해져 있음.

  ※ 생성자는 리턴 값이 없어도 void형으로 선언하지 않음.

- 생성자는 전달인자를 받아들여 각각의 멤버 변수 값을 초기화함

- 생성자의 초기화 예시:

- 암시적 호출 : Date Today(2019,1,9);

- 명시적 호출 : Date Today = Date(2019,1,9);

- 포인터 사용 : Date *pToday = new Date(2019,1,9);

● 소멸자(Destructor)

- 객체의 임무가 끝나면 프로그램은 소멸자라는 이름을 가진 특별한 함수를 자동으로 호출함.

- 소멸자는 객체가 작업한 흔적을 깨끗하게 지우는 역할을 함.

- 형식 : 소멸자도 생성자와 동일하게 클래스 이름과 동일한 이름을 갖는다. 다만, 이름 앞에 ~(틸트 기호)가 붙음

Date::~Date(){}

※사용자가 명시적으로 소멸자를 호출할 수 없음 -> 프로그램이 종료될 때 자동으로 호출 됨.

  사용자가 소멸자를 구현하지 않을 경우 컴파일러가 디폴트 소멸자를 제공함.



728x90

'스마트웹앱콘텐츠전문가 > C++' 카테고리의 다른 글

[객체 지향 언어의 특징][상속]  (0) 2019.01.14
[friend와 연산자 오버로딩]  (0) 2019.01.11
[객체배열과 객체포인터]  (0) 2019.01.10
기초구문  (0) 2019.01.08
개발 환경 구축  (0) 2019.01.08