본문 바로가기

[C++]더블포인트, 과제4 풀이 및 클래스의 정의

반응형

더블포인트

int *A= new int[2]를 하면 heap영역에 메모리 두 자리를 만든다. *A는 heap영역을 가르키는 것이고 [2]이므로 두 자리의 메모리를 만든다.

nt **A= new int[2] 그런데 여기에 포인터를 하나 더 쓰면 스택영역에서 힙영역을 가르키고 또 힙영역에서 다른 힙영역을 가르키는 의미가 된다.

그래서 더블포인트를 선언한 후에 A[0] = new int[5];라 하면 힙 영역에서 다른 힙영역에 메모리 5자리를 만드는 것이고 new int[7]이라고 하면 heap영역에서 다른 힙영역에 7자리 메모리를 만드는 것이다.

1. 크기가 5 x 7 인 int 동적 배열을 생성한 다음, 0부터 순서대로 값을 저장하세요.

(c언어 타입도 작성하시오.)

   

#include <iostream>

using namespace std;

   

int main()

{

      

    int a;

    int b;

    int i;

    int c;

    int x;

    int y;

      

    cout<<" (x)by(y) :";

    cin>>x>>y;            // x by y 입력받기

      

      

      

    int **dp = new int*[x];        // (값을 저장할 배열의) 주소를 저장할 배열 동적 할당 (포인터를                                                // x개 만들겠다. 세로

    for(i=0; i<x; i++)

    {

        dp[i] = new int[y];    //(값을 저장할 배열의)주소 입력, 값을 저장할 배열 동적 할당.  포인                                         //터에 해당하는 배열을 y개 만들겠다

    }

      

    for(a=0; a<x; a++)

    {

        for(b=0; b<y; b++)

        {

            dp[a][b] = a*y + b;    //2차원 배열처럼 쓸 수 있다 - 출력값 입력

            cout<<"dp ["<<a<<"]["<<b<<"] = " << dp[a][b]<<"\t";

              

            if(b==(y-1))           //y숫자 맞춰줘서 끝나면 행건너뛰기.

            {

            cout<<"\n";

            }

        }

          

    }

      

      

    for(c=0; c<x; c++)

    {

        delete[] dp[c];        //값을 저장한 메모리 해제(해제할 때도 나중에 선언한 것 먼저 해제하                                         //고 그 다음에 처음 선언했던 것 해제하기.

    }

      

    delete[] dp;            //주소를 저장한 메모리 해제

      

    return 0;

}

   

2. 사용자가 입력한 크기만큼인 int 자료형 동적 배열을 생성해서 0부터 순서대로 채우세요. 사용자가 입력한 숫자가 100이라면, 0부터 99까지의 값을 배열에 저장합니다.

출력) 동적 배열크기 입력 : 10

[0] = 0

[1] = 1

[2] = 2

[3] = 3

[4] = 4

[5] = 5

[6] = 6

[7] = 7

[8] = 8

[9] = 9

   

   

#include <iostream>

   

using namespace std;

   

 int main()

 {

   int a;

   cout<<"동적 배열크기 입력 :";

   cin>>a;

   int*arr=new int[a];

   for(int i=0;i<a;++i)

  {

        cout<<"["<<i<<"]"<<"="<<i<<"\n";

   }

      delete[] arr;

      return 0;

  }

   

3. 초 입력시 분과 초로 변환하는 프로그램을 작성하세요.

출력) Input Seconds : 100

Output : 1 min 40 sec

   

   

#include <iostream>

   

using namespace std;

   

int main()

{

int a;

cout << "Input seconds :";

cin >> a;

int b =(a/60);

if( a < 60)

{

cout << a << " min";

}

else if( a > 60)

{

//++b;

cout << b << " min" <<" "<< a-(b*60) <<" sec";

}

}

   

4. 입력된 정수의 2의 보수를 구하여 10진수, 16진수 형태로 출력하세요.

출력) Input Number : 1

2's complement(10진수) : -1

2's complement(16진수) : ffffffff

   

   

#include <iostream>

   

using namespace std;

   

int main()

{

int a;

   

cout << "Input Number :";

cin >> a;

int b = (~a)+1;

cout << "2's complement(10진수) : " << b << "\n";

cout << "2's complement(16진수) : " << hex<<b;

   

}

   

클레스는 변수 뿐만 아니라 함수까지도 포함할 수 있다.

함수가 들어간다는 것은 기능까지 들어갈 수 있다는 것이다.

구조체는 데이터만 들어갈 수 있다.(구조체는 자료형이 다른 변수의 모임.)

   

클레스에 비유할 수 있는 것이 붕어빵틀과 제품 설계도라면 객체는 붕어빵과 제품이다.

   

  • 구조체

    Struct A

    {

    int a;

    int b;

    }AA;

       

  • 객체

    main()

    {

    AA(자료형) BB(변수);

    }

    >>클래스를 사용하면 구조체 처럼 struct AA라고 struct를 달아줄 필요 없이 바로 클래스명 객체 이렇게 써주면 된다.

       

  • 클래스 예시

       

    Class A

    {

    int a;

    int b;

       

    } AA;

       

  • 즉 AA가 클래스가 되고 BB(변수)는 객체가 되는 것이다.
반응형
-->