20141015 (C++ class 내에 const static, mutable, 상속, )

158일차







-----------

C++

-----------




------- const static 멤버


class 내에 선언된 const static 멤버는 class 내에서 초기화를 한다.


예제)

#include <iostream>


using namespace std;


class CountryArea

{

public:

const static int RUSSIA = 1707540; // class 내에서 초기화

const static int CANADA = 998467; // class 내에서 초기화

const static int CHINA = 957290; // class 내에서 초기화

const static int SOUTH_KOREA = 9922; // class 내에서 초기화

};


int main(void)

{

cout << "러시아 면적: " << CountryArea::RUSSIA << "㎢" << endl;

cout << "캐나다 면적: " << CountryArea::CANADA << "㎢" << endl;

cout << "중국 면적: " << CountryArea::CHINA << "㎢" << endl;

cout << "한국 면적: " << CountryArea::SOUTH_KOREA << "㎢" << endl;


return 0;

}









------- mutable


const 함수 내에서 예외적으로 값 변경을 허용하는 키워드


예제)

#include <iostream>


using namespace std;


class SoSimple

{

private:

int num1;

mutable int num2;


public:

SoSimple(int n1, int n2) : num1(n1), num2(n2)

{

}


void ShowSimpleData() const

{

cout << num1 << ", " << num2 << endl;

}


void CopyToNum2() const

{

num2 = num1; // const 변수인데 값 수정 가능

}

};


int main()

{

SoSimple sm(1, 2);


sm.ShowSimpleData();

sm.CopyToNum2();

sm.ShowSimpleData();


return 0;

}



좋은 기능이지만 mutable을 사용하지 않는 편이 좋다









------- 상속


Ray 라는 class와 Tico라는 class를 만드는데,

바퀴, 엔진, 색상... 같은 변수는 공통적으로 들어간다.

비슷한 class를 만들 때마다 변수 목록을 복사 + 붙여넣기 하면 되지만,

번거롭다.....


그래서 상속이라는 것이 있는데, 공통적으로 반드시 들어가는 변수, 함수를 모아

Car 라는 class로 정의 하고 Ray, Tico 같은 class에서 상속만 받으면 된다.


상속 받는 법은 아래 예제를 참고한다.


예제)

#include <iostream>

#include <cstring>


using namespace std;


class Car

{

public: // 생략시 private

int Tire;

int Eng;

int Handle;

char Color[100];


public:

void Print()

{

cout << "Tire\t: " << Tire << endl;

cout << "Color\t: " << Color << endl;

}

};

// Car class 가 결함이 있다면

// 상속 받는 다른 class도 다 결함을 갖는다


class Ray : public Car // 상속 받음

{

};


class Tico : public Car // 상속 받음

{

};


int main()

{

Ray MyCar1;

Tico MyCar2;


MyCar1.Tire = 4; // 상속을 받으면 상위 class의 멤버

MyCar2.Tire = 4; // 자신의 멤버처럼 사용할 수 있다.


strcpy(MyCar1.Color, "PINK"); // 상속을 받으면 상위 class의 멤버

strcpy(MyCar2.Color, "RED"); // 자신의 멤버처럼 사용할 수 있다.


MyCar1.Print(); // 상속을 받으면 상위 class의 멤버

MyCar2.Print(); // 자신의 멤버처럼 사용할 수 있다.


return 0;

}





공통적인 클래스를 부모 클래스라 부르고, 

부모 클래스의 멤버를 상속받는 클래스를 자식 클래스라고 한다.


부모, 자식 말고도 여러가지로 불리는데 아래와 같다.



아주 편리한 기능이지만 단점도 있다.

상위 클래스에 결함이 있다면 하위 클래스도 똑같이 물려 받게 된다.






























설정

트랙백

댓글