목적
  - 수학 공식에 맞는 클래스 자료형과 공식을 C++ 에 적용한다.

문제
사용자 삽입 이미지

코드



해설
  - 생성자(Constructor)는 클래스가 생성시(인스턴스화) 기본적으로 수행하는 구문입니다. 변수를 초기화 하거나 객체를 복사나 할당/생성 될때 수행되며 여러가지 역할을 합니다. 이와 반대 되는게 파괴자(Destructor) 입니다.
  - m_PrintArea() 맴버함수는 넓이를 m_PrintVol() 맴버함수는 부피를 출력합니다.
  - 각각의 맴버변수는 private 형으로 선언 되어있기 때문에 맴버 함수인 m_PrintArea, m_PrintVol, 생성자, 파괴자 외에는 접근할수 없습니다.(정보 은닉)
  - 직육면체 겉넓이는 가로*높이*2 + 가로*세로*2 + 세로*높이*2 이며 부피는 가로*세로*높이 입니다.

참고

 - 유사 문제

Posted by 카켈



목적
  - 클래스를 이해한다.

문제
사용자 삽입 이미지

코드





해설
  - 클래스를 사용하여 문제를 풀었습니다.
  - Stu.h Stu.cpp 2004_final_1.cpp 이렇게 구성되어 있으며 클래스내 맴버 구성은 아래와 같습니다.
  - m_Add() 맴버 함수는 맴버 변수에 저장될 자료의 추가를 m_Print() 맴버함수는 맴버 변수를 출력하고 m_Check() 는 y / n 값을 받아 y 이면 종료를 다른 값이면 n 을 받아 리턴하여 반복 할것인지 판정하는 함수 입니다.

  - Visual C++ 에서 프로그램상 클래스를 추가하는 방법입니다. 조금은 복잡하지만 이걸 알아 두면 나중에 복잡한 클래스 코드를 쉽게 구현할수 있습니다.

    Workspace 창에 보면 ClassView 이라는 창이 있습니다. 그곳에서 프로젝트 명을 오른쪽 버튼을 클릭 New Class... 를 선택하세요

사용자 삽입 이미지
 


    클래스의 종류와 이름을 선택하세요 여기서는 Generic Class 만 선택할수 있습니다. 상속이나 기타 다른 설정은 여기서 할 필요 없습니다.

사용자 삽입 이미지

    맴버 함수와 변수를 만들고 선택하세요. m_Add() m_Print() m_Check() 는 외부 main 함수 내에서 쓰기 때문에 public 으로 선언하시고 맴버 변수인 spName, spSid, spDepart 는 맴버 함수들에 의해서만 쓰여질 것이기 때문에 private 로 하시면 됩니다.

사용자 삽입 이미지

사용자 삽입 이미지
   
사용자 삽입 이미지

 코드를 완성하세요. 위에 쓰여진대로 쓰시거나 원하시는 코드를 넣으시면 됩니다. 단 쓰여질 범위는 클래스를 정의하는 cpp 파일에서 하시는게 좋습니다. 기본 마법사 툴에서 그렇게 하게 제공합니다.

사용자 삽입 이미지

    완성된 클래스의 형태입니다. 이렇게 하시면 Stu 라는 객체가 완성이 되는 것입니다.

사용자 삽입 이미지

파일 구조는 아래와 같습니다.
사용자 삽입 이미지

    잊지 마셔야 할 것은 그 함수를 쓰거나 자료형을 쓸려면 꼭 include 시켜줘야 하는 것입니다. 컴파일러는 프로젝트내에 파일이 열려있다는 사실만으로는 그 파일이 필요한지 그 자료형이 필요해서 자동으로 넣어 주지는 않습니다.

참고
  - 유사 문제

Posted by 카켈




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

문제

사용자 삽입 이미지

풀이

#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++ 문법

Posted by 카켈
이전페이지 1 다음페이지