[C++] 클래스

클래스

 

(복습)

* 구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치

ex) struct Car{소유주,연료량,현재속도,취득점수,취득아이템}

* C++에서는 기본 자료형 변수의 선언방식이나 구조체를 기반으로 정의된 자료형의 변수 선언방식에 차이가 없다. 즉, 별도의 typedef 선언 없이도 변수를 선언할 수 있다.

* 조건부 컴파일()

- 기존의 코드를 지우지 않고 활성화 비활성화 할 때 쓰인다.

(C/C++에서 단어의 앞에 '#'이 오면 선행처리 지시자라고 한다. 선행처리 지시자는 소스 코드를 컴파일 하기 전에 프로그램 파일에 명시된 선행처리 지시자를 처리하게 된다.)

- #ifndef ~ #endif

ex)

#ifndef _SLEX_H_  //ifndef(if not defined) 만약에 _SLEX_H_라는 단어가 정의되어 있지 않다면 #ifndef~#endif 사이의 문장들을 실행한다.(중복을 방지해 준다.)

#define _SLEX_H_

...

#endif  //조건부 컴파일의 종료

 

* 열거형(enum)

- 이름을 갖는 정수형의 상수를 정의하여 프로그램을 이해하기 쉽게 해준다.

ex) enum typpe_name{열거 리스트...};

- 열거리스트의 각 원소는 0에서 시작하는 정수 값을 가지고 있다. 혹은 프로그램 내에서 각 원소의 값을 임의로 지정할 수 있다.

 

 

클래스

- 클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.

 

+접근제어 지시자(접근제어 레이블)

- public : 어디서든 접근허용

- protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용

- private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용

(접근제어 지시자의 뒤에는 세미콜론이 아닌 콜론이 붙는데, 이는 접근제어 지시자가 특정 위치정보를 알리는 '레이블(라벨)'이기 때문이다. 우리가 알고 있는, switch문에 사용되는 case도 레이블이기 때문에 콜론이 붙는다.)

 

+용어정리

- 멤버변수, 멤버함수 : 클래스 내에 선언된 변수, 함수

 

------------------------------------------------------------------------------

[열혈/문제] 03-2 문제1

 

#include <iostream>

using namespace std;

class Calculator{

      private:

              double cntAdd,cntSub,cntMul,cntDiv;  //연산 횟수

      public:

             double Add(double n1, double n2);

             double Sub(double n1, double n2);

             double Mul(double n1, double n2);

             double Div(double n1, double n2);

             void ShowOpCount();

             void Init();

};

 

void Calculator::Init(){

     cntAdd=0;

     cntSub=0;

     cntMul=0;

     cntDiv=0;

}

 

double Calculator::Add(double n1, double n2){

       cntAdd++;

       return n1+n2;

}

 

double Calculator::Sub(double n1, double n2){

       cntSub++;

       return n1-n2;

}

 

double Calculator::Mul(double n1, double n2){

       cntMul++;

       return n1*n2;

}

 

double Calculator::Div(double n1, double n2){

       cntDiv++;

       return n1/n2;

}

 

void Calculator::ShowOpCount(){

     cout<<"Add: "<<cntAdd<<" Sub: "<<cntSub<<" Mul: "<<cntMul<<" Div: "<<cntDiv<<endl;

}

 

int main(void){

    Calculator cal;

    cal.Init();

    

    cout<<"3.2 + 2.4 = "<<cal.Add(3.2,2.4)<<endl;

    cout<<"3.5 / 1.7 = "<<cal.Div(3.5,1.7)<<endl;

    cout<<"2.2 - 1.5 = "<<cal.Sub(2.2,1.5)<<endl;

    cout<<"4.9 / 1.2 = "<<cal.Div(4.9,1.2)<<endl;

    cal.ShowOpCount();

    

    system("pause");

    return 0;

}

------------------------------------------------------------------------------

[열혈/문제] 03-2 문제2

 

#include <iostream>

#include <cstring>

#define LEN 20

using namespace std;

 

class Printer{  //문자열 저장, 출력 

      private:

              char strSave[LEN];

              

      public:

             void SetString(char * str);

             void ShowString(void);

};

 

void Printer::SetString(char * str){

     strcpy(strSave,str);

}

 

void Printer::ShowString(){

     cout<<strSave<<endl;

}

 

int main(void){

    Printer pnt;

    pnt.SetString("Hello world!");

    pnt.ShowString();

    

    pnt.SetString("It will be hard");

    pnt.ShowString();

    

    system("pause");

    return 0;