C++ 수업 090804~090807#

 

090804-TUE#

 

1장#

cout<<출력1<<"출력2string"<<출력3;

std::cout<<"출력";   // :: 공간지정 연산자

  • std 영역안에 있는 cout 을 사용

 

함수 오버로딩 Function Overloading#


 

 

동일한 함수명 중복하여 사용, 매개변수가 다르므로 구분

동일한 함수명 (매개변수1)

동일한 함수명 (매개변수1, 매개변수2)

 

  1. #include <iostream>
  2. int function(int a=10)                          // int a=10은 파라미터가 없는 경우로, 함수의 지역변수 a에 디폴트값인 10을 입력한다.{
        return a+1;
    }
    int function(void)                              // void는 값이 없는 경우로 함수의 정의가 모호해짐{
        return 10;
    }
    int main(void)
    {
        //std::cout<<function(10)<<std::endl;            // 결과 11    std::cout<<function(11)<<std::endl;            // 결과 12    //std::cout<<function()<<std::endl;           // ambiguous! 모호해짐    return 0;
    }

 

인-라인화#

  • C에서는 Macro함수

    • 전처리기에 의해 처리
    • 실행 속도의 향상
    • 구현의 어려움
  • C++에서는 inline 선언에 의한 함수의 인-라인화

    • 컴파일러에 의해서 처리
    • 실행 속도의 향상
    • 구현 용이성
    • 컴파일러에게 최적화의 기회 제공

 

이름공간 Namespace#

namespace std {            // 선언

cout;

cin;

endl;                              // endline

}

using namespace std;      // 사용

 

2장 키워드#

 

const키워드#

 

자료형 bool#

C언어에는 1과 0으로 true, false를 구분

C++에는 논리적인 참과 거짓을 의미하는 키워드 true나 fasle를 사용 , 데이터타입 bool로 선언하여 사용

데이터 타입 bool result;    

result = true;

 

레퍼런스 Reference#

 

int val=10;

int *val=&val;               // &는 val의 주소값을 의미

int &ref = val;               // &는 val의 Reference를 선언하는 의미

 

  1. #include <iostream>
  2. using std::cout;
    using std::endl;
  3. int main(void)
    {
        int val=10;
        int &ref=val;
  4.     val++;
        cout<<"ref : "<<ref<<endl;
        cout<<"val : "<<val<<endl;
  5.     ref++;
        cout<<"ref : "<<ref<<endl;
        cout<<"val : "<<val<<endl;
  6.     return 0;
    }

 

  • 레퍼런스의 제약

    • 초기화?
  • 레퍼런스를 이용한 Call by Reference

    • 포인터 연산을 할 필요가 없으므로 안정적

      • 데이터의 복사 연산이 필요 없다.
    • 원본 데이터의 손실 예상 - const 선언!

      • function (const char* name);         // 함수내에서 name을 변경할 수 없도록 한다.

 

new 와 delete#

Cpp에서                                                                      C에서

int *val = new int;                                                         int *val = (int*)malloc(sizeof(int));

int *val = new int[size];                                                int *val = (int*)malloc(sizeof(int*size));

 

delete val;

delete []arr;

 

  • NULL 포인터 리턴하는 new 연산자

 

  1. #include <iostream>
  2. using std::cout;
    using std::endl;
  3. int& increment(int &val){
        val++;
        return val;
    }
  4. int main(void)
    {
        int n=10;
        int &ref=increment(n);
  5.     cout<<"n : "<<n<<endl;
        cout<<"ref : "<<ref<<endl;
  6.     return 0;
    }

 

  1. /* ref_error.cpp */
    #include <iostream>
  2. using std::cout;
    using std::endl;
  3. int& function(void){
        int val=10;
        return val;
    }
  4. int main(void)
    {
        int &ref=function();
  5.     cout<<"ref : "<<ref<<endl;      //현재 결과는 10 이 나오지만, 나중에 포인터 연산을 하게 되면 error 발생
  6.     return 0;
    }

 

090805-WED #

3장 클래스#

3-1 구조체와 클래스#

 


  • 데이터 추상화 -> 클래스화 -> 인스턴스화(객체)
  • 접근 제어 : public, private, protected

 

  1. #include <iostream>
  2. using namespace std;
  3. class Counter  {
    public :    int val;                        // 멤버 변수    void Increment(void)            // 멤버 함수만이 클래스 내의 멤버 변수를 사용할 수 있다    {
        val++;
        }
    };
  4. int main(void)
    {
        Counter cnt;    cnt.val=0;    cnt.Increment();
        cout<<cnt.val<<endl;
        return 0;
    }

 

3-4 멤버 함수의 외부 정의#

  • 멤버 함수의 인-라인 화
  • 헤더 파일을 이용한 파일의 분할

 

4장 클래스의 정의#

  • 클래스

    • 캡슐화(모듈, 기능별 정의)
    • 정보 은닉
  • 클래스 객체의 생성과 소멸

    • 생성자
    • 소멸자

4-1 정보 은닉#

  • public을 사용하지 않고 private이나 protected를 사용
  • public을 사용한다는 것은 class이전의 C로 돌아가는 것임

 

4-2 캡슐화#

  • class

 

4-3 생성자와 소멸자#

  • 생성자 함수를 통한 인자 전달
  • public 생성자 : 어디서든 객체 생성 가능
  • private 생성자 : 클래스 내부에서만 가능

Person p = Person("KIM", "010-000-0000", 22);

Person p("KIM", "010-000-0000", 22);                     // 객체를 만들면서 매개 변수를 써서 함수를 호출

Person p();                                                      // 파라미터 형식을 맞춰줘야 함

 

  • 디폴트 생성자
Person(){}

 

4-4 클래스와 배열#

 

  • 객체 배열과 생성자

    • 객체를 배열로 가짐
    • 객체 배열은 기본적으로 void 생성자의 호출을 요구한다.
  • 객체 포인터 배열

    • 포인터로 배열을 가짐

 

4-5 this 포인터#

  • this 포인터의 의미

    • 클래스 자기 자신

class Point {

int aaa;

public :

 Point(int aaa)

{

this->aaa=aaa;             // this->aaa는 class의 aaa, 그냥 aaa는 public안의 aaa

}

};

 

4-6 friend 선언#

  • friend 선언의 유용성

    • 유용하지 않다
    • 정보 은닉에 위배되는 개념
    • 연산자 오버로딩에서 유용하게 사용

 

  1. #include <iostream>
  2. using std::cout;
    using std::cin;
    using std::endl;
  3. class Counter
    {
        int val;
  4. public:
        Counter() {       // 생성자 초기화
            val=0;
        }
        void Print() const{              // {블럭 안에서}값 변경 금지 const        cout<<val<<endl;
        }
        friend void SetX(Counter& c, int val);           // friend 선언};
  5. void SetX(Counter& c, int val)          // 전역 함수{   c.val=val;   }
  6. int main()
    {
        Counter cnt;
        cnt.Print();
  7.     SetX(cnt, 2002);
        cnt.Print();
        return 0;
    }

 

 

연습문제 - Linked List (C -> C++)#

  • C 에서 사용한 scanf 나 printf는 그대로 사용할 수는 있지만, 좋지 않다
  • C 에서 쓴 getch()는 C++ 에서 사용 불가 -> getche() 로 대체
  • 소멸자 함수에서 함수를 메모리에서 해제하기 위해 delete 연산자를 사용한다. 생성된 구조체를 모두 찾아서 해제시켜준다.
  • C에서 사용한 malloc 대신에 new연산자를 사용한다.
  • C에서 class를 만들어서 함수 선언을 해준다
  • C++의 main()에서 함수를 호출할 경우 class명을 붙이고 :: 공간지정연산자를 붙여서 호출한다.

이 글은 스프링노트에서 작성되었습니다.

'old > C Grammer' 카테고리의 다른 글

기억 부류  (0) 2010.11.18
함수  (0) 2010.11.17
연산자  (0) 2010.11.16
제어문  (0) 2010.11.15
변수  (0) 2010.11.12
Posted by jazzlife
,