예제

1. 다음 배열을 가리킬 수 있는 포인터 변수를 선언 및 초기화 하세요.

#include <iostream>
using namespace std;

int main()
{
  int C[9];
  int *pC = C;

  char B[20];
  char *pB = B;

  double A[10][10];
  double (*pA)[10= A;

  int D[5][7];
  int (*pD)[7= D;

  char E[4][5];
  char (*pE)[5= E;

  return 0;
}

2. 함수의 선언은 다음과 같습니다. 이 함수를 가리킬 수 있는 포인터 변수를 선언 및 초기화 하세요.
#include <iostream>
using namespace std;

char IntToChar(int num)
{
  cout << "IntToChar " << num << endl;
  return 0;
}

void MaxNum(int N1, int N2)
{
  cout << "MaxNum " << N1 << N2 << endl;
}

int OutputIDnum(char *name, int pwd)
{
  cout << "OutputIDnum " << name << pwd << endl;
  return 0;
}

int main()
{
  // 함수 포인터 선언 및 초기화
  char (*fp1)(int= IntToChar;
  void (*fp2)(intint= MaxNum;
  int (*fp3)(char *, int= OutputIDnum;

  // 함수 포인터를 이용하여 호출
  (*fp1)(1);
  (*fp2)(11);
  (*fp3)("test"1);

  return 0;
}


3. 클래스 멤버 함수를 가리킬 수 있는 포인터 변수를 선언 및 초기화를 하세요.

(클래스 외부에서 포인터 선언한다고 가정)

 Point.h
#ifndef POINT_H
#define POINT_H

// Point 클래수를 정의한다
class Point
{
public:
  // 멤버 함수
  void Print() const;
  void Offset(int x_delta, int y_delta);
  void Offset(const Point& pt);

  // 생성자들
  Point();
  Point(int initialX, int initialY);
  Point(const Point& pt);

  // 소멸자
  ~Point();

  // 접근자
  void SetX(int value);
  void SetY(int value);
  int GetX() const
  {
    return x;
  }
  int GetY() const
  {
    return y;
  }
private:
  // 멤버 변수
  int x, y;
};

#endif

 main.cpp
#include "Point.h"
#include <iostream>
using namespace std;

int main()
{
  Point p(100100);

  // 멤버 함수 선언 및 초기화
  void (Point::*fp1)(int= &Point::SetX;
  void (Point::*fp2)(int= &Point::SetY;
  int (Point::*fp3)(voidconst = &Point::GetX;
  int (Point::*fp4)(voidconst = &Point::GetY;
  void (Point::*fp5)(voidconst = &Point::Print;

  // 멤버 함수 호출
  (p.*fp5)();

  (p.*fp1)(50);
  (p.*fp2)(50);

  (p.*fp5)();

  return 0;
}


4. 사용자에게 년도를 입력 받아 윤년인지 아닌지를 판단하는 판단하는 프로그램을 작성하시오.

윤년은 아래와 같다.

l  4로 나누어 떨어지는 해이다.

l  그 중에서 100으로 나누어 떨어지는 해는 평년

l  다만 400으로 나누어 떨어지는 해는 다시 윤년


 Year.h
#ifndef YEAR_H
#define YEAR_H

class Year
{
public:
  // 생성자
  Year();
  Year(int y);

  // 멤버 함수
  void setYear(int y);
  int getYear() const;
  bool isLeapYear() const;
protected:
  int years;
};

#endif

 Year.cpp
#include "Year.h"

void Year::setYear(int y)
{
  years = y;
}

int Year::getYear() const
{
  return years;
}

// 윤년인지 여부를 알려주는 함수(return value 1 이면 윤년)
bool Year::isLeapYear() const
{
  if(years % 4 == 0)
  {
    if(years % 400 == 0)
    {
      return 1;
    }
    else if(years % 100 != 0)
    {
      return 1;
    }
  }
  return 0;
}

// 디폴트 생성자
Year::Year()
{
  setYear(0);
}

// 인자가 있는 생성자
Year::Year(int y)
{
  setYear(y);
}

 main.cpp
#include "Year.h"
#include <iostream>
using namespace std;

int main()
{
  int y;

  cout << "Input Year: ";
  cin >> y;

  Year cy(y);
  
  if(cy.isLeapYear())
  {
    cout << "[" << cy.getYear() << "] is leap year" << endl;
  }
  else
  {
    cout << "[" << cy.getYear() << "] is common year" << endl;
  }

  return 0;
}



   인터럽트 제어기(AIC:Advanced Interrupt Controller)

인터럽트 제어기와 관련된 I/O 제어 레지스터



+ Recent posts