본문 바로가기

분류 전체보기

(72)
[클래스와 객체]-클래스 선언과 객체 정의 클래스는 C++ 언어에서 객체지향 개념을 구현하기 위한 도구로서, 프로그램에서 사용하고자 하는 객체들에 대한 형판을 정의한 것으로 볼 수 있다. 즉, 클래스와 객체의 관계는 자료형과 변수의 관계와 유사하다. 그러나 자료형이 변수가 저장할 데이터의 형태만 정의한 반면, 클래스는 각각의 객체를 표현하는 속성과 함께 그 객체들에 대한 메시지를 처리하는 메소드를 정의해 놓은 것 이다. 그리고 객체는 이러한 형판에 따라 만들어진 사례가 되는 것이다. C++ 언어에서는 클래스 안에 정의한 속성들을 데이터 멤버(data member)라고 부르고, 메소들르 멤버함수(member function)라고 부른다. 클래스의 선언 클래스 선언문의 형식은 다음과 같다. class ClassName { 가시성_지시어_1: 데이터 ..
[클래스와 객체]-객체지향 프로그래밍의 주요 개념 C++ 언어는 객체지향 프로그래밍을 지원하는 프로그래밍 언어이다. 객체지향 언어의 효시는 1967년에 발표된 Simula67이다. 그 이름을 통해 예상할 수 있는 것처럼 Simula는 시뮬레이션(simulation)을 위해 개발된 언어이다. 시뮬레이션이란 현실세계에 존재하는 여러 가지 개체와 이들이 상호작용하는 과정을 컴퓨터를 통해 가상으로 수행하는 것이다. 이처럼 객체지향 개념의 태동이 시뮬레이션과 관계가 있다는 점은 객체지향을 이해하는데 큰 의미가 있다. 즉, 분석의 출발점이 '어떠한 프로세스를 통해 작업을 수행하는가'가 아니라 '현실세계를 시물레이션하는 컴퓨터 내의 가상세계 안에 어떠한 개체들이 존재하는가'이다. 시뮬레이션의 대상이 되는 개체들은 각각 정해진 동작을 하며, 그 과정에서 개체 각각의 ..
[함수]-inline 함수 함수를 호출하는 과정에는 인수를 전달하고, 함수의 위치로 분기하며, 결과를 반환하고, 호출한 위치로 되돌아오는 동작이 수반된다. 이에 따른 처리시간 및 코드의 증가는 비록 미미한 것이지만, 때로는 매우 빠른 처리가 필요하여 불필요한 시간 지연을 피하고 싶을때가 있다. 특히 모듈의 크기가 매우 작아 모듈을 실행하는 시간이나 모듈 크기가 함수 호출에 따른 부수적인 시간 및 크드의 양과 큰 차이가 없고, 이 모듈을 매우 빈번히 호출한다면 함수를 사용하지 않는 것이 더 바람직할 수 있다. inline 함수는 함수가 가지는 모듈화의 장점을 살리면서 이러한 불필요한 실행 효율 저하를 막기 위해 사용할 수 있다. inline 함수를 작성하는 것은 inline 키워드를 사용하는 것 외에는 일반 함수와 동일하다. 그러나..
[함수]-함수의 다중정의 다중정의(overloading)란 동일한 이름에 대하여 여러 가지 의미를 부여하는 것이다. C++ 언어에서는 함수를 다중정의할 수 있다. 즉, 동일한 이름을 갖는 함수를 여러 개 정의할 수 있다. 함수를 다중정의하는 것은 동일한 개념의 처리를 다양한 데이터나 객체에 대해 해야 할 경우 쓰인다. 각각의 대상에 맞는 처리방법을 같은 이름을 갖는 함수들로 만듦으로써 의미를 일맥상통하게 만들어 주는 효과가 있다. 함수를 다중정의한 경우, 사용되는 함수가 같은 이름을 가지고 있는 여러 함수 중에서 어느 함수를 의미하는가를 구분할 수 있어야 한다. 구분의 기준은 인수의 개수 및 인수의 자료형이다. 컴파일러는 이를 근거로 동일한 이름을 갖는 여러 함수 중에서 어느 함수를 사용한 것인지를 알아낸다. 반환 자료형은 구분..
[함수]-인수의 전달-디폴트 인수 함수의 인수 중 특정 인수는 일반적으로 사용하는 디폴트 값이 있고, 특별한 경우에만 다른 값을 사용하는 경우가 있다. 이런 경우에는 디폴트 인수를 사용할 수 있다. [소스코드 3-8]은 반올림을 하는 함수 Round()룰 사용하여 원하는 자리에서 반올림을 할 수 있도록 하는 프로그램이다. #include #include using namespace std; double Round(double x, int d = 0); int main() { double a; cout > a; cout
[함수]-인수의 전달-const 매개변수 참조 호출을 하거나 매개변수가 포인터인 경우 함수 내에서 호출 루틴의 실 매개변수를 수정할 수 있다. 그러나 이러한 방식의 호출을 했다고 해도 실 매개변수의 값을 보호하고 싶을 때에는 해당 형식 매개변수를 const로 지정하면 된다. 이러한 형태의 매개변수는 데이터의 크기가 큰 인수를 전달할 때 유용하게 사용할 수 있다. 만일 이러한 데이터를 값 호출 방식으로 전달하면 이를 복사하기 위해 많은 시간이 소비되며, 메모리도 많이 소비된다. 이런 경우에는 참조 호출을 이용하는 것이 바람직하다. 그러나 참조 호출을 하면 호출한 루틴에서 전달한 인수가 함수를 실행한 후 원래의 값을 유지하고 있다는 것을 보장받지 못한다. 이때 실 매개변수의 값이 변경되지 않음을 보장하기 위해 함수의 형식 매개변수에 const를 지..
[함수]-인수의 전달-참조 호출 값 호출과는 달리 참조 호출은 실 매개변수의 참조, 즉 주소를 전달한다. 이에 따라 형식 매개변수는 전달되는 실 매개변수의 별명처럼 사용된다. C 언어에서는 참조 호출 방식을 제공하지 않기 때문에, 참조 호출이 필요할 때는 포인터를 전달하는 방법을 사용하였다. 그러나 C++ 언어에서는 참조형을 사용 할 수 있다. 다음 프로그램은 참조 호출을 사용하는 함수를 사용하는 예이다. // 소스코드 3-5 : SwapInt.cpp #include using namespace std; void SwapValues(int& x, int& y); // 원형 int main() { int a, b; cout > a >> b; if (a < b) SwapValues(a, b); // 순서를 바꿔 a에 큰 값을 넣음 cout
[함수]-인수의 전달-값 호출 #include using namespace std; // 화씨온도를 섭씨온도로 변환하는 함수 // 매개변수 float fahr : 화씨온도 // 반환값 섭씨온도(float) float FahrToC(float fahr) { // 함수 FahrToC()를 정의 return (fahr - 32) * 5 / 9; } int main() { float fTemp, cTemp; cout > fTemp; cTemp = FahrToC(fTemp); // 함수 호출 cout