Programming/C C++
C++은 C에서 파생된 언어로 몇가지 변화한 사항이 있기는 하지만 전체적인 면에서는 그렇게 변화를 가지고 있지는 않습니다. 또한 새로 접해야할 부분도 그다지 많지않으므로 이미 C를 접한 상태라면 C++은 좀더 쉽게 접근하실 수 있습니다.

C에서 사용하던 문법적인 면도 C++에서 그대로 사용가능한 경우가 많기 때문에 Coding하는 측면에서는 어느정도의 호환성을 유지하고 있습니다.(물론 C++이라 하더라도 C요소를 너무 많이 집어넣으면 C++으로서의 의미를 상실하게 될것입니다.)

C는 절차지향적언어라고 합니다. 절차지향이란 물흐르듯이 위에서 아래순서로 흘러가는 Program의 구조를 말합니다. 반면 C++은 객체지향언어로서 C에 객체지향개념을 입힌것이 바로 C++이 되겠습니다.(가장 크게 변화한 부분이라고 할 수 있습니다.)

또한 C에서 작성되는 모든 Program에 빠짐없이 선언되는 Header File로 stdio.h 라는 것이 있습니다. 거의 표준적으로 선언되는 것이라 해도 과언이 아닌데 C++에도 C의 stdio.h처럼 C++ Program작성시에 꼭 선언해야할 Header File이 있습니다.

iostream.h라는 Header File이 바로 그것입니다.

C에서는 서식출력을 나타내는 함수로 printf()함수를 사용하였습니다.(물론 그외 함수도 많이 있지만 가장 많이 쓰이는 함수를 예로 들었습니다.) 반면 C++은 cout (console out)라는 함수를 사용합니다. 입력또한 C에서는 scanf()함수를 사용하였다면 C++에서는 cin(console in)이 사용됩니다.(이때 사용되는 << 나 >> 는 입력 또는 출력방향을 나타냅니다. ex: cout << "abc" : "abc" 내용을 cout를 통해 출력할것)

#include <iostream.h>

main()
{
  int i;
 
  cout << "숫자입력 : ";
  cin >> i;
  cout << "입력한 숫자 : " << i << endl;
 
  return 0;
}


cout를 통해 문자열을 출력하고 cin으로 입력 받습니다.

C에서 printf()로 Dta출력시 %를 통해 출력되는 Dta형을 지정해줄 필요가 있었습니다. 그러나 C++에서는

cout << "입력한 숫자 : " << i << endl;

처럼 출력하고자 하는 변수를 지정하는 것만으로 충분합니다. 이는 해당 변수의 Dta형에 맞춰 알아서 해주기 때문입니다. 입력도 마찬가지로 C에서 scnaf()사용할때면 Dta형을 지정해 줘야 했지만 cin에서는 입력받을 변수만 지정해 주면 해당 변수의 Dta형에 자동으로 맞추게 됩니다.

마지막에 return 0; 은 Pogram을 Memory에서 소거하고 종료하기 위한 것입니다. C에서는 필요없으면 return을 하지않지만 C++에서는 Program종료시 return이 있어야 합니다.(물론 Return을 하지 않아도 Program작동에 문제가 되지는 않지만 C++에서는 C보다 Memory관리측면이 더 엄격해졌습니다. C++에서 Memory누수를 막으려면 되도록 Return 0;을 통해 Program을 종료시키는 습관이 들이는 것이 좋습니다.)

cout에서 마지막에 쓰인 endl은 printf()에서의 \n 과 같은 역활을 수행합니다. 물로 다음과 같이 해도

cout << "입력한 숫자 : " << i << "\n";

문제되지 않습니다. 이러듯 C++에서도 C와의 호환성을 어느정도 유지하고 있는 것입니다.

Source File의 확장자는 C에서는 .c 였으나 C++은 확장자가 .cpp로 되어야 합니다.


위 Program에서 변수선언은 int i;로 하였습니다. 변수를 선언하는 방식은 C나 C++이나 별다른 차이가 없으나 C에서는 반드시 Program의 가장 처음부분에 선언되어야 하는 제한이 있었던 반면 C++에서는 비교적 자유롭게 변수를 선언할 수 있습니다.

#include <iostream.h>

main()
{
  int i;
 
  cout << "숫자입력 : ";
  cin >> i;
  cout << "입력한 숫자 : " << i << endl;
 
  int j = 10;
 
  i += j;
 
  cout << i << " <- 최종값" << endl;
 
  return 0;
}


Program 중간부분에서 int형 변수 j를 선언하였습니다. (C에서는 이러한 방식은 허용하지 않습니다.)

변수선언시 C언어에서는 전역변수와 지역변수의 이름을 똑같이 하여 같이 사용할 수 없습니다. 오류는 나지 않지만 전역변수와 지역변수의 이름이 같으면 지역변수로 인식하게 됩니다.

반면 C++에서는 ::(Scope) 연산자가 있기 때문에 이러한 문제를 해결할 수 있습니다. (::(Scope)연산자는 Class와 관련이 깊은 연산자 입니다.)

#include <iostream.h>

int i;

main()
{
  int i;
 
  i = 10;
  ::i = 20;
 
  cout << "지역변수 i의 값 : " << i << endl;
  cout << "전역변수 i의 값 : " << ::i << endl;
 
  return 0;
}


전역변수 i와 지역변수 i를 동시에 사용하고 있습니다.

예제 에서는 ::(Scope)연산자를 통해 전연변수 i에 값을 넣고 그 값을 확인하고 있습니다.(::i)


여기서 int는 변수의 Data형입니다. 이 Data형에 따라 변수에 저장할 수 있는 값이 달라지는데 이 Data형의 특성은 C언에서의 변수형과 거의 차이가 없습니다.

[Develop/C, C++] - [C, C++] 변수선언및 초기화

어떠한 Data를 다루는 데에는 변수이외에 구조체, 공용체와 열거형이라는 Data형식을 사용할 수 있습니다. C++에서는 C와 마찬가지로 이들 형식을 선언하고 사용할 수 있으나 C와는 달리 이들 형식을 완전히 다른 Data형으로 인식하기 때문에 구조체에서의 struct, 공용체에서의 union, 열거형에서의 enum을 선언할 필요가 없어졌습니다.

#include <iostream.h>

main()
{
  struct score {
    int kuk;
    int eng;
    int mat;
  };
 
  score student_sre;
 
  student_sre.kuk = 90;
  student_sre.eng = 100;
  student_sre.mat = 88;
 
  cout << "학생의 국어점수 " << student_sre.kuk << " 학생의 영어점수 " << student_sre.eng << " 학생의 수학점수 " << student_sre.mat << endl;
 
  return 0;
}


구조체의 경우 C에서는 struct score student_sre; 라고 해야 하지만 C++에서는 struct를 따로 붙이지 않습니다.


#include <iostream.h>

main()
{
  union sher{
    int a;
    int b;
    int c;
  };
 
  sher alp = {300};
 
  cout << "sher공용체 각 member의 값 : " << alp.a << " - " << alp.b << " - " << alp.c << endl;
 
  return 0;
}


공용체의 경우 C에서는 union sher alp = {300}; 이라고 해야 하지만 C++에서는 union을 붙이지 않습니다.


#include <iostream.h>

main()
{
  enum sequence {
    first,
    second,
    third,
    fourth,
    fifth
  };
 
  sequence sort;
 
  sort = third;
 
  cout << "sort의 값 " << sort << endl;
 
  return 0;
}


열거형의 경우 C에서는 enum sequence sort; 라고 해야 하지만 C++에서는 enum을 붙이지 않습니다.


C++에서 void형 Pointer를 선언했을때 또다른 Pointer(주소값)을 대입하려면 반드시 형변환을 해줘야 합니다. 그러나 C에서 이와 같은 작업은 안전성을 위해서 비교적 해주는 것이 좋은 것일뿐 '반드시' 해줘야 하는 것은 아니었습니다.

void *p;
char *c;
c = p;

C에서는 경고사항일뿐 위와같이 반드시 형변환을 해줄 필요는 없었으나 C++에서는 오류입니다.

C에서 주석을 추가하려면 /* 와 */사이에 해당 주석문을 넣어야 합니다. 하지만 C++은 /* ~ */방식의 주석은 물론 // 를 통한 주석도 추가할 수 있습니다.

#include <iostream.h>

main()
{
  /* program의 시작
    2009-03-03 일 */
  int i;
 
  cout << "숫자입력 : ";
  cin >> i;
  cout << "입력한 숫자 : " << i << endl;
 
  int j = 10;
 
  i += j; //10을 더함.
 
  cout << i << " <- 최종값" << endl;
 
  return 0;
}


/* ~ */ 를 통한 주석과 //를 통한 주석문의 예제입니다.

/* 는 */ 가 올때까지 전체를 주석으로 처리하는 반면 //는 해당 Line에 한하여 그 끝까지 주석으로 처리합니다. 이러한 특징으로 인해 /* ~ */는 여러줄의 주석에 //는 한줄주석에 많이 사용되곤 합니다.

참고 :
해당 C++ Program Compiler는 Visual Studio 6 Version의 cl Compiler입니다. 본래 표준은 iostream이며 Visual Studio 6 에서는 iostream과 iostream.h 둘다 제공합니다.
1 0