C++ 언어는 C언어와 달리 객체지향(obeject oriented) 언어이다.
C++ 언어에서 클래스(class) 라고 하는 것은 C 언어의 구조체(struct) 개념을 확장한 것이다.
C 언어의 구조체(struct)는 자료(데이터)만 가질 수 있지만, C++ 언어의 클래스(class)는 자료 뿐만이 아니라 자료를 핸들링하는 메소드도 가질 수 있다.
메소드란 클래스에 소속된다는 것이 C 언어의 함수와 구별된다.
클래스 변수를 선언험과 동시에 클래스에 속한 자료와 메소드는 동적으로 로딩되어 힙(heap)이라는 메모리에 탑재된다.
C 언어의 구조체 정의 구문 양식:
struct 구조체명 {
타입 변수명1;
타입 변수명2;
...........
타입 변수명n;
};
C++ 언어의 클래스 정의 구문 양식:
class 클래스명 {
접근유형1: // 접근 유형은 public, protected, procate 등
타입 변수명1;
...........
타입 변수명n;
타입 함수명1;
...........
타입 함수명n;
접근유형2:
타입 변수명1;
...........
타입 변수명n;
타입 함수명1;
...........
타입 함수명n;
};
소스 파일명: forTestObject.cpp
------------------------------[소스 시작]
#include <iostream.h>
class ForTestObject {
public:
ForTestObject(); // 생성자
~ForTestObject(); // 소멸자
void printDan(int dan);
}; // 클래스 정의 구문은 반드시 세미콜론(;)으로 끝나야 한다.
// 생성자 정의
ForTestObject::ForTestObject() {
}
// 소멸자 정의
ForTestObject::~ForTestObject() {
}
// printDan() 함수 정의
void ForTestObject::printDan(int dan) {
int i;
for (i = 1; i < 10; i++) {
cout << dan << " x " << i << " = " << (dan*i) << endl;
}
}
// main 함수
void main() {
ForTestObject test;
test.printDan(2);
}
------------------------------[소스 끝]
위의 소스에서 endl 은 C 언어의 개행 문자 "\n"에 해당한다.
컴파일은 Visual C++ 6.0을 써서 한다.
컴파일> cl forTestObject.cpp
(참고: 에러 없이 컴파일이 순조롭게 끝나면 현재 디렉토리에 forTestObject.obj라는 목적 파일과 forTestObject.exe라는 살행 파일이 존재할 것이다.)
실행> forTestObject
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
확장자명이 cpp인 소스도 (컴파일 과정 없이) Ch에 의하여 직접 실행된다.
Command> ch forTestObject.cpp
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
위의 소스는 표준화되기 전의 C++ 소스이다. 1998년에 정해진 C++표준화에 따르면 헤더 파일 포함 구문이
#include <iostream.h>
#include <string.h>
#include <math.h>
등
으로 부터
#include <iostream>
#include <string>
#include <cmath>
등
으로 변경되었다. 이렇게 변경해야 표준 C++에서 printf 등을 쓸 수 잇다. 하지만 cout, cin 등은 std::cout, std::cin 등으로 써야 한다. 이것이 불편하다면 헤더 파일 포함(include) 구문이 끝난 후
using namespace std;
라는 한 줄만 추가하면 된다.
(내부 참고: C 유저를 위한 C++ 팁 모음)
(상세 외부 참고: 방법: 표준 C++ 프로그램 만들기)
다음 소스는 forTestObject.cpp 를 표준 C++에 따라 재작성한 소스이다.
소스 파일명: forTestObject2.cpp
------------------------------[소스 시작]
#include <iostream>
using namespace std;
class ForTestObject {
public:
ForTestObject(); // 생성자
~ForTestObject(); // 소멸자
void printDan(int dan);
}; // 클래스 정의 구문은 반드시 세미콜론(;)으로 끝나야 한다.
// 생성자 정의
ForTestObject::ForTestObject() {
}
// 소멸자 정의
ForTestObject::~ForTestObject() {
}
// printDan() 함수 정의
void ForTestObject::printDan(int dan) {
int i;
for (i = 1; i < 10; i++) {
cout << dan << " x " << i << " = " << (dan*i) << endl;
}
}
// main 함수
void main() {
ForTestObject test;
test.printDan(2);
}
------------------------------[소스 끝]
컴파일은 Visual C++ 6.0을 써서 한다.
컴파일> cl /GX forTestObject2.cpp
(또는) cl -GX forTestObject2.cpp
(또는) cl /EHsc forTestObject2.cpp
(또는) cl -EHsc forTestObject2.cpp
(실행 결과는 위와 같다.)
이 소스도 (컴파일 없이) 직접 Ch로 실행된다.
Command> ch forTestObject2.cpp
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
Linux(또는 Unix) 플랫폼에서 gcc나 g++gh 컴파일 하는 경우라면 main 함수만 다음 처럼 수정하면 된다. Linux(또는 Unix) 플랫폼의 경우에는 C++ 소스의 확장명을 보통 cc로 한다. 따라서 소스 파일명을 forTestObject2.cc로 저장하여 컴파일한다.
// main 함수
int main() {
ForTestObject test;
test.printDan(2);
return 0;
}
컴파일> gcc -o forTestObject2 forTestObject2.cc
(또는) g++ -o forTestObject2 forTestObject2.cc
실행> ./forTestObject2
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
다음 예제는 namespace std 를 사용하지 않은 C++ 소스이다.
이 경우에는 cout, cin, endl 대신에 정규화된 이름 std::cout, std::cin, std:endl을 써야 한다.
(참고: 정규화된 이름을 사용한 다음 소스는 Ch 5.5로는 실행되지 않는다.)
소스 파일명: forTestObject3.cpp
------------------------------[소스 시작]
#include <iostream>
class ForTestObject {
public:
ForTestObject(); // 생성자
~ForTestObject(); // 소멸자
void printDan(int dan);
}; // 클래스 정의 구문은 반드시 세미콜론(;)으로 끝나야 한다.
// 생성자 정의
ForTestObject::ForTestObject() {
}
// 소멸자 정의
ForTestObject::~ForTestObject() {
}
// printDan() 함수 정의
void ForTestObject::printDan(int dan) {
int i;
for (i = 1; i < 10; i++) {
std:cout << dan << " x " << i << " = " << (dan*i) << std::endl;
}
}
// main 함수
void main() {
ForTestObject test;
test.printDan(2);
}
------------------------------[소스 끝]
컴파일> cl /GX forTestObject3.cpp
(또는) cl -GX forTestObject3.cpp
(또는) cl /EHsc forTestObject3.cpp
(또는) cl -EHsc forTestObject3.cpp
(실행 결과는 위와 같다.)
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Ch' 카테고리의 다른 글
(최대공약수 구하기) while... 반복문 예제 for Ch (0) | 2008.02.22 |
---|---|
구구단 출력 예제 for Ch, C, and C++ (0) | 2008.02.17 |