소프트웨어/C++

[2003년 기말 6번] 육면체 부피 계산 - 클래스 / 생성자 / friend

카켈 2007. 2. 24. 05:51




목적
  - 클래스를 이해하고 외부 함수에서 클래스가 보호하고 있는 변수를 이용할 줄 안다.
  - 생성자를 이해한다.

문제


풀이

#include <iostream>

using namespace std;

 class cHexahedron
 {
  public:
   friend int i_Volumn(int, int, int);
   cHexahedron() { iX = iY = iZ = 0; }
   void v_GetValue();
   void v_Print();

  private:
   int iX, iY, iZ;

 };

void cHexahedron::v_GetValue()
{
 int aX, aY, aZ;
 aX = aY = aZ = 0;
 cout << "육면체의 가로, 세로, 높이를 입력하세요 : ";
 cin >> aX >> aY >> aZ;
 iX = aX; iY = aY; iZ = aZ;
 
 return;
 
}

void cHexahedron::v_Print()
{
 cout << "육면체의 부피 : " << i_Volumn(iX, iY, iZ) << endl;
 return;
}

int i_Volumn(int iX, int iY, int iZ)
{ return iX * iY * iZ; }

int main(void)
{
 cHexahedron cHex[3];
 for(int i = 0; i < 3; i++)
 {
  cout << i + 1 << "번째 ";
  cHex[i].v_GetValue();
 }
 
 for(i = 0; i < 3; i++)
 {
  cout << i + 1 << "번째 ";
  cHex[i].v_Print();
 }

 return 0;
}


해설
  - 클래스와 함수 구조입니다.

  -  iX 와 iY, IZ 는 private 로 보호된 맴버 변수 입니다. private 는 클래스의 맴버가 아닌 다른 외부 함수에서 불러다 쓸수 없습니다. 이를 정보 보호 / 은닉이라 하는데 자료의 효율적인 관리를 목적으로 만들어진 것입니다. 예외적으로 friend 함수를 두어 private 맴버라도 불러다 쓸수 있게 합니다. public 영역에서 friend 를 선언하여 남용을 방지 합니다.

  - 맴버 함수에서는 부른 객체 자신을 가리키는 this 객체가 기본적으로 존재 합니다. 이를 생략해서 그냥 iX, iY, iZ 를 써서 쓸수 있지만 이를 표기하여 this.iX this.iY this.iZ 로 쓸수 있습니다. 맴버 함수에서는 자신이 속한 클래스 객체의 맴버 변수를 쓸수 있으므로 private 로 선언된 맴버 변수도 자유롭게 쓸수 있습니다.

  - "i + 1 번째 " 만 따로 출력하여 공통된 부분의 출력부를 최소화 했습니다.

참고
  - 클래스는 C++ 의 가장 두들어진 객체지향적 특징입니다. C 에서는 극히 일부 기능을 구조체에서 제공하고 있습니다. 클래스는 잠깐 공부하기 보다 아래 페이지에서 자세히 공부 하시는게 이후 C++ 의 클래스를 이해하시는데 도움이 될 것입니다.

  - http://www.winapi.co.kr/clec/cpp4/cpp4.htm : winapi 에서 제공하는 C++ 문법