객체지향, C++ 첫시간(cout, endl, 오버로딩)
내장형 하드웨어/C++ / 2011. 11. 8. 10:29
- 객체지향 언어 (C++, 자바...)
→ C 언어는 구조적 프로그램
→ 객체, 절차 등의 분류는 무엇을 타겟으로 작성하는 것으로 나눈다.
→ 즉, 객체지향 언어란 객채에 집중하는 언어이다.
→ 객체지향은 Object Oriented C, → OOC라 부르며 이것은 객체지향으로 짜는 C라는 말이다.
→ C로도 객체지향의 개념을 가지면 객체 지향을 표현할 수 있으나 이는 많은 시간과 불편함이 따른다.
→ 어셈블리, C 등은 제어를 위해 태어난 언어이다.
→ 사실상 모든 프로그램은 Hardware를 컨트롤 하기 위한 것이나 그 활용의 차이가 있다.
→ 예로 Assembly와 C를 비교해 보면
A변수가 1000번지에 위치하고 있을 때
0x64+1을 표현한다면 C의 경우 A = 64+1; 로 표현하면 끝이지만 Assembly의 경우 대략
mov eax, 0x64
inc eax
mov [1000], eax 의 형식으로 사용해야 한다.
이것은 저급언어와 고급언어의 차이, 즉, 사용자(인간) 중심으로 언어가 작성되는 가의 차이이다.
→ RAD(Rapid Application Development) 툴(예, visual basic, delphi...)의 경우 개발 속도와 그래픽에 최적화 되어 있다.
→ 언어는 고급언어로 갈 수록 개발 속도나 개발환경이 편리해 지나 번지를 직접 건드릴 방법이 없어 제어에는 적합하지 않게 된다.
→ 상위 계층은 하위 계층의 개념을 포함한다.
→ 구조적 프로그래밍의 개념을 적용하면 C는 전체가 public이며, 전역에 static을 붙이면 protected가 된다.
→ 언어는 사용 목적에 맞추어 선택해 사용해야 한다. (구조적 프로그램을 작성하거나 H/W 등의 직접적인 접근을 위해서 C를 사용하는 등)
- C++ 언어 수업 (※ 추천 도서 - C 프로그래머를 위한 C++(한빛 미디어-번역본))
→ C+은 모든 C의 문법을 포함한다.
→ cl은 원래대로 linux는 gcc 대신 g++로 컴파일(g++ -o main main.cpp)
→ g++는 C++의 확장자가 .cpp 외에도 .cc, .c++, .C 등의 여러가지의 확장자가 있으며 모두 컴파 가능하다.
→ 하지만 cl은 .cpp 이외의 확장자를 인식하지 않는다.
→ 이는 cl은 확장자 , gcc는 명령어 기반이기 때문
→ 예제
→ enum의 타입은 enum으로 여기에 int형을 대입하면 C++에서는 에러가 발생한다. 반대로 C에서는 에러가 발생하지 않는데 즉, C++이 타입(형)에 대해 엄격하다는 것을 알 수 있다.
→ 단, 반대로 int형에 enum형을 대입하는 것은 C와 C++ 둘다 가능하다.
→ 또한 union도 enum과 역시 같은 성질을 가진다.
→ C++은 C와는 다르게 struct의 생략이 가능하다. 따라서 구조체에서 typedef가 필요 없다.(사용하지 않아도 struct의 생략이 가능하므로)
→ C++은 stdio.h 대신 iostream.h를 사용한다.
→ printf의 대신으로 cout을 사용한다.
→ 'c'는 콘솔을 의미하며 'out'은 출력 '<<'은 화면으로 보낸다는 뜻으로 즉, 모니터에 출력한다는 의미
→ 또한 cout은 원래 타입이 무엇인지 스스로 판단해서 출력한다.
→ 구구단 작성
→ 출력
- 오버 라이딩
→ 함수가 이름과 시그니쳐(인자)까지 같은 것
- 오버 로딩
→ 함수 이름이 같고 인자가 다른 것(인자로 구분 - 함수 이름이 같기 때문에 인자의 개수로 기능을 조절할 수 있다.)
→ "\n" 대신 endl 을 사용할 수 있다.
→ C 언어는 구조적 프로그램
→ 객체, 절차 등의 분류는 무엇을 타겟으로 작성하는 것으로 나눈다.
→ 즉, 객체지향 언어란 객채에 집중하는 언어이다.
→ 객체지향은 Object Oriented C, → OOC라 부르며 이것은 객체지향으로 짜는 C라는 말이다.
→ C로도 객체지향의 개념을 가지면 객체 지향을 표현할 수 있으나 이는 많은 시간과 불편함이 따른다.
→ 어셈블리, C 등은 제어를 위해 태어난 언어이다.
→ 사실상 모든 프로그램은 Hardware를 컨트롤 하기 위한 것이나 그 활용의 차이가 있다.
→ 예로 Assembly와 C를 비교해 보면
A변수가 1000번지에 위치하고 있을 때
0x64+1을 표현한다면 C의 경우 A = 64+1; 로 표현하면 끝이지만 Assembly의 경우 대략
mov eax, 0x64
inc eax
mov [1000], eax 의 형식으로 사용해야 한다.
이것은 저급언어와 고급언어의 차이, 즉, 사용자(인간) 중심으로 언어가 작성되는 가의 차이이다.
→ RAD(Rapid Application Development) 툴(예, visual basic, delphi...)의 경우 개발 속도와 그래픽에 최적화 되어 있다.
→ 언어는 고급언어로 갈 수록 개발 속도나 개발환경이 편리해 지나 번지를 직접 건드릴 방법이 없어 제어에는 적합하지 않게 된다.
→ 상위 계층은 하위 계층의 개념을 포함한다.
→ 구조적 프로그래밍의 개념을 적용하면 C는 전체가 public이며, 전역에 static을 붙이면 protected가 된다.
→ 언어는 사용 목적에 맞추어 선택해 사용해야 한다. (구조적 프로그램을 작성하거나 H/W 등의 직접적인 접근을 위해서 C를 사용하는 등)
- C++ 언어 수업 (※ 추천 도서 - C 프로그래머를 위한 C++(한빛 미디어-번역본))
→ C+은 모든 C의 문법을 포함한다.
→ cl은 원래대로 linux는 gcc 대신 g++로 컴파일(g++ -o main main.cpp)
→ g++는 C++의 확장자가 .cpp 외에도 .cc, .c++, .C 등의 여러가지의 확장자가 있으며 모두 컴파 가능하다.
→ 하지만 cl은 .cpp 이외의 확장자를 인식하지 않는다.
→ 이는 cl은 확장자 , gcc는 명령어 기반이기 때문
→ 예제
#include<stdio.h>
enum Test2
{
ZERO,
ONE
};
struct Test
{
int A;
};
int main()
{
struct Test OBJ1;
struct Test OBJ2;
//enum Test2 OBJ3 = 0;
int OBJ4 = ZERO;
printf("%d\n", OBJ4);
printf("Hi!!\n");
return 0;
}
→ 위의 컴파일을 살펴보면 우선 enum Test2 OBJ3 = 0; 부분이 주석 처리되어 있다. 저 부분의 주석을 풀고 .c와 .cpp로 각각 컴파일해 보면 .c는 정상적으로 .cpp는 컴파일 에러가 나는 것을 확인할 수 있다.enum Test2
{
ZERO,
ONE
};
struct Test
{
int A;
};
int main()
{
struct Test OBJ1;
struct Test OBJ2;
//enum Test2 OBJ3 = 0;
int OBJ4 = ZERO;
printf("%d\n", OBJ4);
printf("Hi!!\n");
return 0;
}
→ enum의 타입은 enum으로 여기에 int형을 대입하면 C++에서는 에러가 발생한다. 반대로 C에서는 에러가 발생하지 않는데 즉, C++이 타입(형)에 대해 엄격하다는 것을 알 수 있다.
→ 단, 반대로 int형에 enum형을 대입하는 것은 C와 C++ 둘다 가능하다.
→ 또한 union도 enum과 역시 같은 성질을 가진다.
→ C++은 C와는 다르게 struct의 생략이 가능하다. 따라서 구조체에서 typedef가 필요 없다.(사용하지 않아도 struct의 생략이 가능하므로)
#include<iostream.h>
int main()
{
int A = 100;
float B = 5.1f;
char C = 97;
cout << "Hi!!\n";
cout << A << "\n";
cout << B << "\n";
cout << C << "\n";
return 0;
}
int main()
{
int A = 100;
float B = 5.1f;
char C = 97;
cout << "Hi!!\n";
cout << A << "\n";
cout << B << "\n";
cout << C << "\n";
return 0;
}
→ C++은 stdio.h 대신 iostream.h를 사용한다.
→ printf의 대신으로 cout을 사용한다.
→ 'c'는 콘솔을 의미하며 'out'은 출력 '<<'은 화면으로 보낸다는 뜻으로 즉, 모니터에 출력한다는 의미
→ 또한 cout은 원래 타입이 무엇인지 스스로 판단해서 출력한다.
→ 구구단 작성
#include<iostream.h>
int main()
{
int A = 100;
float B = 5.1f;
char C = 97;
int iCntX;
int iCntY;
cout << "Hi!!\n";
cout << A << "\n";
cout << B << "\n";
cout << C << "\n";
cout << "test " << A << " " << B << "\n";
// 구구단 출력 1~9단
for(iCntX = 1; 9 >= iCntX; ++iCntX)
{
for(iCntY = 1; 9 >= iCntY; ++iCntY)
{
//cout << iCntX << "x" << iCntY << " = " << (iCntX*iCntY) << "\n";
cout << iCntY << "x" << iCntX << " = " << (iCntX*iCntY) << " ";
}
cout << "\n";
}
return 0;
}
int main()
{
int A = 100;
float B = 5.1f;
char C = 97;
int iCntX;
int iCntY;
cout << "Hi!!\n";
cout << A << "\n";
cout << B << "\n";
cout << C << "\n";
cout << "test " << A << " " << B << "\n";
// 구구단 출력 1~9단
for(iCntX = 1; 9 >= iCntX; ++iCntX)
{
for(iCntY = 1; 9 >= iCntY; ++iCntY)
{
//cout << iCntX << "x" << iCntY << " = " << (iCntX*iCntY) << "\n";
cout << iCntY << "x" << iCntX << " = " << (iCntX*iCntY) << " ";
}
cout << "\n";
}
return 0;
}
→ 출력
- 오버 라이딩
→ 함수가 이름과 시그니쳐(인자)까지 같은 것
- 오버 로딩
→ 함수 이름이 같고 인자가 다른 것(인자로 구분 - 함수 이름이 같기 때문에 인자의 개수로 기능을 조절할 수 있다.)
#include<iostream.h>
void Test(int A)
{
cout << A << endl;
return ;
}
void Test(int A, int B)
{
cout << A << " " << B << endl;
return ;
}
int main()
{
Test(100);
Test(100, 75);
return 0;
}
void Test(int A)
{
cout << A << endl;
return ;
}
void Test(int A, int B)
{
cout << A << " " << B << endl;
return ;
}
int main()
{
Test(100);
Test(100, 75);
return 0;
}
→ 출력
→ "\n" 대신 endl 을 사용할 수 있다.
|
'내장형 하드웨어 > C++' 카테고리의 다른 글
C++ - 객체 소멸 순서, 객체 생성(정적, 동적 할당-malloc, new) (0) | 2011.11.15 |
---|---|
C++ - car class 추가, 다중상속, 유도(derivation), 타입 (0) | 2011.11.14 |
C++ 생성자, 소멸자, 상속 (0) | 2011.11.11 |
C++ 클래스, 접근속성, scope 연산자(::), inline (0) | 2011.11.10 |
C++ (함수 인자의 새로운 용법, 오버로딩 과정 확인) (0) | 2011.11.09 |