hahahia

C++ 상속(inheritance) 본문

Language/C++

C++ 상속(inheritance)

hahahia 2012. 9. 1. 01:41

상속(Inheritance)의 사전적 의미는 자식이 부모가 가진 모든 것을 물려 받는 것을 의미하는데 OOP의 상속도 기본적인 의미는 동일하다. 이미 정의되어 있는 클래스의 모든 특성을 물려 받아 새로운 클래스를 작성하는 기법을 상속이라고 한다. 흔히 상속은 이미 만들어진 클래스를 재활용하기 위한 기법으로 소개되며 재활용이 상속의 가장 큰 장점이기는 하지만 상속에 의해 부차적으로 발생하는 효과도 있다. 상속을 하는 목적 또는 상속에 의한 효과는 다음 세가지로 간략하게 요약할 수 있다.

 

① 기존의 클래스를 재활용한다. 가장 기본적인 효과이다.

② 공통되는 부분을 상위 클래스에 통합하여 반복을 제거하고 유지, 보수를 편리하게 한다.

③ 공동의 조상을 가지는 계층을 만듬으로써 객체의 집합에 다형성을 부여한다.

- 출처(http://www.winapi.co.kr)



지금 예제에서는 

circle 객체는 point 객체를 포함 하여, 중심 좌표를 가지며 figure 객체를 상속하고 있습니다. 즉 circle 객체는 figure의 모든 public, protect 멤버에 대해서 접근이 가능합니다(public 상속)

그중 protect는 상속받는 객체만이 public처럼 접근이 가능하지만, 외부에서 protect변수는 private처럼 접근이 불가능합니다. (circle이 figure을 상속받게 되는거겠죠)


/*

Class 상속 예제

made by hahahia

*/

 

#include <iostream>

#include <string>

using namespace std;

 

class point{ /* x,y 좌표를 나타내는 간단한 클래스 */

private:

    int x,y;

public:

    point(int _x,int _y): x(_x),y(_y) {}; /* C++ Style(= {x = _x; y = _y;} */

    int getX() const { return x; }

    int getY() const { return y; }

};

 

class figure{

private:

    string Name;

protected:

    string protect;

public:

    figure(string _Name){

        Name = _Name;

    }

    const string getName() const{

        return Name;

    }

};

 

class circle : public figure // <--  

{

private:

    point center;

    int radius;

public:

    circle(int x,int y,int _radius)

        :center(x,y),figure(""),radius(_radius){}; // constructor에서 figure 클래스에 대해 "" public 속성에 있는 figure 생성자로 설정

    void showData(){

        cout << getName() << " 입니다" << endl; //<-- figure 객체의 함수를 사용!

        cout << " (" << center.getX() << ", " << center.getY() << ")" << endl;

        cout << "Radius : " << radius << endl;

        protect = " protect 마치 public처럼 접근이 가능~~~!! // protect변수 접근가능

cout << protect << endl;

    }

};

 

int main(){

    circle myCircle(1,23,5);

    myCircle.showData();

    return 0;

}

 


실행결과


'Language > C++' 카테고리의 다른 글

C++ 복사생성자(생성자에 관한 이해 및 얕은,깊은 복사)  (0) 2012.10.20
Template Function(템플릿 함수)  (0) 2012.09.01
C++ 포함  (0) 2012.09.01
Operator Overloading(연산자 오버로딩)  (0) 2012.09.01
1주차  (0) 2011.06.27
Comments