LARGE_INTEGER start, stop, frequency;

 

QueryPerformanceFrequency(&frequency);

 

QueryPerformanceCounter(&start);

(연산)

 

QueryPerformanceCounter(&stop);

 

float 소요시간 = ((float)stop.QuadPart - (float)start.QuadPart)  / (float)frequency.QuadPart;

 

 

소요시간 = 받아온 시간의 차 / 프리퀀시 

 

'C,C++' 카테고리의 다른 글

열혈강의C++ 3장 요약  (0) 2015.12.09
열혈강의C++ 2장 요약  (0) 2015.09.15
열혈강의C++ 1장 요약  (0) 2015.09.15

1. 구조체의 유용성
 - 관련 있는 데이터를 하나의 자료형으로 묶을 수 있다.
 - 프로그램의 구현 및 관리가 용이해진다.

 

2. C 언어의 구조체에 대한 불만
 - 기본 자료형으로 인식해 주지 않는다.

struct Person{
    int age;
    char name[10];
};

int main()
{
    int a=10;
    Person p;    // struct Person p;
    return 0;
}

 

3. 함수를 넣으면 좋은 구조체
 - 프로그램=데이터+데이터 조작 루틴(함수)
 - 잘 구성된 프로그램은 데이터와 더불어 함수들도 부류를 형성

 

struct Account {
    char accID[20];   
    char secID[20];
    char name[20];    
    int balance;      

    void Deposit(int money){
        balance+=money;
    }
    void Withdraw(int money){
        balance-=money;
    }
};

 

4. 구조체가 아니라 클래스(Class)
 - 클래스 = 멤버 변수 + 멤버 함수
 - 변수가 아니라 객체(Object: 완전한 대상체)
 
5. 데이터 추상화 이후의 클래스화
 - 추상화된 데이터를 가지고 사용자 정의 자료형을 정의하는 것

 

위의 struct Account {...}의 경우
데이터 = 계좌번호, 비밀번호, 이름, 잔액
기능 = 입금, 출금

 

6. 클래스의 내부 접근과 외부 접근
public, protected, private

 

7. 멤버함수의 외부 정의

class Door{
private:
    int state;

public:
    void Open();
    void Close();
    void ShowState();
};

void Door::Open(){
   state=OPEN;
}
void Door::Close(){
   state=CLOSE;
}
void Door::ShowState(){
   ...
}


 
 
 
 
 
 
 
 

'C,C++' 카테고리의 다른 글

Query Performance Counter  (0) 2015.12.22
열혈강의C++ 2장 요약  (0) 2015.09.15
열혈강의C++ 1장 요약  (0) 2015.09.15

2-1. 들어가기에 앞서서.

문제 1 : const 키워드의 의미

      const int n=10;

      const int* n;

      int* const n;

      const int* const n

문제 2 : stack의 용도 및 특징

문제 3 : heap의 용도 및 특징

문제 4 : malloc & free 함수의 필요성

 

2-2. 자료형 bool

참을 의미하는 true, 거짓을 의미하는 false중 하나의 값을 가진다.

 

2-3. 레퍼런스의 개념

대상에 별명을 붙여주는 행위

 

int & ref= val;

 

int main(void)

  {   

      int val=10; 

      int *pVal=&val;       // 주소 값을 얻기 위해 & 연산자 사용

      int &rVal=val;                   // 레퍼런스 선언을 위해 & 연산자 사용

      return 0;

  }

 

-       레퍼런스에 대한 또 다른 접근

변수란? 메모리 공간에 붙여진 이름.

그런 메모리 공간에 이름을 하나 더 추가하는 행위.

-       레퍼런스의 제약.

이름이 존재하지 않는 대상은 레퍼런스화 할수 없다.

선언과 동시에 바로 초기화 하여야 한다.

int main(void)

  {

      int &ref1;               // 초기화되지 않았으므로 ERROR!

      int &ref2=10;          // 상수가 올 수 없으므로 ERROR!

 

      int val=10;

      ref1=val;

      . . . . .

 

2-4. 레퍼런스와 함수.

-       포인터를 이용한 call-by-reference

함수 외부에 선언된 변수의 접근이 가능.

포인터 연산에 의해서 가능.

따라서 포인터 연산의 위험성 존재.

void swap(int *a, int *b)

  {

      int temp=*a;

      a++;               //잘못 들어간 코드

      *a=*b;

      *b=temp;

}

 

2-5. 레퍼런스를 이용한 성능의 향상.

-       부담스러운 call-by-value

함수 호출 시 인자 전달 과정에서 발생.

데이터를 복사하는 과정에서 발생.

 

-       대신할 수 있는 call-by-reference

전달되는 인자를 레퍼런스로 받으면 데이터의 복사 연산이 필요 없다.

원본 데이터의 손실 가능성이 있다. à const 선언의 이유.

 

2-6. 레퍼런스를 리턴하는 함수.

/*  ref_return.cpp  */

 int& increment(int &val)

 {

     val++;

     return val;

 

 int main(void)

 {

     int n=10;

     int &ref=increment(n);

 

     cout<<"n  : "<<n<<endl;

     cout<<"ref: "<<ref<<endl;

     return 0;

}

   

/*  ref_error.cpp  */

 int& function(void)

 {

     int val=10;

     return val;

 } 

 int main(void)

 {

     int &ref=function();

     cout<<ref<<endl;

     return 0;

 }

 

레퍼런스 리턴을 가급적이면 사용하지 않는 것이 좋겠다.

 

2-7. new & delete

-       newdelete 연산자의 기본 기능.

int main(void)

{

     int * val = new int; 

     int * arr = new int[size]; 

     . . . . .  

     delete val; 

     delete []arr;

     . . . . .

 

int main(void)

{

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

     int * arr = (int*)malloc(sizeof(int)* size);

      . . . . .  

     free(val); 

     free(arr);

     . . . . .

 

-       NULL 포인터를 리턴하는 new 연산자.

메모리 할당 실패 시 NULL 포인터 리턴.

int* arr=new int[size];                                                              // 배열의 동적 할당

if(arr==NULL)                                                                        // 동적 할당 검사

  {

       cout<<"메모리 할당 실패"<<endl;

       return -1;                                                                        //프로그램 종료

  }            

 

 

'C,C++' 카테고리의 다른 글

Query Performance Counter  (0) 2015.12.22
열혈강의C++ 3장 요약  (0) 2015.12.09
열혈강의C++ 1장 요약  (0) 2015.09.15

1-1. printf scanf

- 출력의 기본 형태 : 과거

iostream.h 포함

cout << 출력 대상;

cout << 1 << 'a' << "String" << endl;

- 출력의 기본 형태 : 현재

iostream 포함

std::cout << 출력 대상;

std::cout << 1 << 'a' << "String" << std::endl;

 

- 입력의 기본 형태 : 과거

iostream.h 포함

cin >> 입력 변수;

cin >> 입력 변수 >> 입력 변수 >> 입력 변수;

- 입력의 기본 형태 : 현재

iostream 포함

std::cin >> 입력 변수;

std::cin >> 입력 변수 >> 입력 변수 >> 입력 변수;

 

1-2. 함수 오버로딩

동일한 이름의 함수를 중복해서 정의하는 것.

매개변수의 갯수 또는 타입이 달라야 한다. 

int function1(int n){...}

int function1(char c){...}

 

int function2(int n){...}

int function2(int n1, int n2){...}

 

1-3. 디폴트 매개변수

전달되지 않은 인자를 대신하기 위한 기본값이 설정되어 있는 변수. 

  int function1(int a = 0)

{

...

}

 

함수 오버로딩시 디폴트 매개변수를 주의해야 한다.

int function1()

int function1(int a = 0)

가 정의가 되어있을때 function1()를 호출한다면 어떤 함수가 호출되어야 하는가.

 

1-4. 인라인 함수

- 매크로 함수를 통한 인라인 함수 : 실행 속도가 빠르다. 구현이 어렵다. 

#include <iostream>

#define SQUARE(x) ((x)*(x)) 

int main(void)

{

   std::cout<< SQUARE(5) <<std::endl;

   return 0;

}

 

- inline 선언에 의한 인라인 함수매크로 함수의 장점을 그대로 반영. 구현이 편리함. 컴파일러에게 최적화 기회 제공 

#include <iostream>

inline int SQUARE(int x)

{

   return x*x;

} 

int main(void)

{

   std::cout<<SQUARE(5)<<std::endl;

   return 0;

}

 

1-5. namespace

공간에 이름을 주는 행위  

#include <iostream> 

void function(void)

{

   std::cout<<"A.com에서 정의한 함수"<<std::endl;

} 

void function(void)

{

   std::cout<<"B.com에서 정의한 함수"<<std::endl;

} 

int main(void)

{

   function();

   return 0;

}

 

편의를 위해 using 사용.

 

범위 지정 연산자 기반 전역 변수 접근. 

int val=100; 

int main(void)

{

   int val=100;

   ::val+=1;

   return 0;

}

 

 

'C,C++' 카테고리의 다른 글

Query Performance Counter  (0) 2015.12.22
열혈강의C++ 3장 요약  (0) 2015.12.09
열혈강의C++ 2장 요약  (0) 2015.09.15

+ Recent posts