• 검색 결과가 없습니다.

 사용(Use 관계) 클래스의 멤버 함수가 다른 클래스의 멤버 함수를 호출함

N/A
N/A
Protected

Academic year: 2022

Share " 사용(Use 관계) 클래스의 멤버 함수가 다른 클래스의 멤버 함수를 호출함"

Copied!
11
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)
(2)

 사용(Use 관계)

클래스의 멤버 함수가 다른 클래스의 멤버 함수를 호출함

 포함(has-a 관계)

클래스의 멤버 변수로 다른 클래스를 사용함 예) Automobile has-a Engine.

 상속(is-a 관계)

다른 클래스의 멤버변수와 멤버함수를 물려받아 사용함

※ 기존 클래스를 활용하여 새로운 클래스가 파생되므로 클래스의 재사용과 신뢰도 향상의 효과가 있음

예) Bus is-a Automobile.

(3)

 클래스의 상속(Inheritance)이란 ?

기존 클래스 멤버를 물려받고, 필요한 멤버를 추가하여 새 로운 클래스를 정의함

예)

클래스명 : Animal 멤버변수 : sp_code

origin_cd name

멤버함수 : void Cry()

클래스명 : Dog 멤버변수 : color

멤버함수 : void Run()

클래스명 : Bird 멤버변수 : wing

멤버함수 : void Fly()

Parent class(부모) Super class(슈퍼) Base class(베이스)

Child class(자식) Sub class(서브)

Derived class(파생)

(4)

 클래스 상속

부모클래스의 멤버변수와 멤버함수를 자식클래스가 상속 받아 사용할 수 있음

※ 부모클래스의 전용멤버(private member)는 접근 불가 형식) class 자식클래스명 : 접근권한 부모클래스명{

멤버 정의 }; :

 접근 지정자 protected(보호)

- 부모클래스의 보호멤버는 자식클래스가 상속받아 사용

할 수 있으나 외부에서는 접근 불가함, 즉 부모클래스의 공

용멤버와 보호멤버가 상속됨

(5)

// 클래스 상속 프로그램

#include <iostream>

#include <string>

using namespace std;

class Animal{

protected:

int sp_code;

int origin_cd;

string name;

public:

Animal(){ };

string get_name(){

return name;};

void Cry(){

cout << "울음" << endl;

return; };

};

class Dog : public Animal{

int color;

public:

Dog(int, int, string, int);

void Run(){ };

};Dog::Dog(int s, int o, string n, int c){

sp_code = s; origin_cd = o;

name = n; color= c;

}int main( )

{ Dog a(10, 20, "발발이", 5);

a.Cry();

cout << a.get_name() << endl;

return 0;

}

(6)

 자식 클래스의 생성 과정

- 부모클래스의 생성자가 실행되고, 자식클래스의 생성자 가 실행됨

- 부모클래스의 생성자는 기본 생성자가 실행되며, 매개변 수 있는 생성자를 실행하려면 생성자 멤버 초기화 리스트를 사용함 ※ 소멸자는 자식클래스, 부모클래스 순으로 실행됨

예) Animal::Animal(int s, int o, string n): sp_code(s), origin_cd(o), name(n){ };

Dog::Dog(int s, int o, string n, int c) : Animal(s, o, n),

color(c){ }

(7)

// 상속 생성자 프로그램

#include <iostream>

#include <string>

using namespace std;

class Animal{

int sp_code;

int origin_cd;

string name;

public:

Animal(int s, int o, string n):

sp_code(s), origin_cd(o), name(n) { };

string get_name(){

return name;};

void Cry(){

cout << "울음" << endl;

return; };

};

class Dog : public Animal{

int color;

public:

Dog(int, int, string, int);

void Run(){ };

};Dog::Dog(int s, int o, string n, int c):

Animal(s, o, n){

color= c;

}int main( )

{ Dog a(10, 20, "발발이", 5);

a.Cry();

cout << a.get_name() << endl;

return 0;

}

(8)

 멤버함수 재정의(Overriding)

- 부모클래스로부터 상속받은 멤버함수의 변경이 필요한 경우에 재정의할 수 있고, 멤버함수의 헤더는 동일하고, 함수 몸체만 수정함

- 함수가 재정의되면 재정의된 함수가 우선적으로 호출됨

※ 부모클래스의 함수를 호출하려면 범위지정자(::)를 사용 하여 명시함

※ 함수 중복(Overloading)과 재정의(Overriding)

※ 멤버변수 재정의

- 부모클래스의 멤버변수와 동일한 멤버변수를 자식클래 스에 정의할 수 있음

- 가급적 사용하지 않는 것이 좋음

(9)

// 상속 멤버 재정의 프로그램

#include <iostream>

#include <string>

using namespace std;

class Animal{

protected:

int sp_code;

int origin_cd;

string name;

public:

Animal(){ };

string get_name(){

return name;};

void Cry(){

cout << "울음" << endl;

return; };

};

class Dog : public Animal{

int color;

public:

Dog(int, int, string, int);

void Cry(){

cout << "멍멍" << endl;

return; };

};※ Dog 생성자 생략함 int main( )

{ Dog a(10, 20, "발발이", 5);

a.Cry();

a.Animal::Cry();

cout << a.get_name() << endl;

return 0;

}

(10)

 public 상속

부모 클래스의 public, protected 멤버는 자식 클래스에서 도 public, protected 멤버로 상속됨

 protected 상속

부모 클래스의 public, protected 멤버는 자식 클래스에서 protected 멤버로 상속됨

 private 상속

부모 클래스의 public, protected 멤버는 자식 클래스에서 private 멤버로 상속됨

※ 부모클래스의 private 멤버는 모든 경우에 접근불가

(11)

 다중상속(multiple inheritance)

- 2개 이상의 부모 클래스를 갖는 상속

- 부모클래스의 멤버 중에 동일한 멤버가 있는 경우 범위 지정자를 붙여야 하는 등의 문제가 있음

형식 예)

class Derived : public Base1, public Base2{

};

참조

관련 문서

유역면적이 상대 적으로 넓고 대부분이 불투수지역인 광주시 경안동 지역의 경우에는 TSS와 TP의 계수가 상대적으로 큰 반면, 유역면 적이 상대적으로 좁고 산과 밭으로

건강행태에 따른 인터넷 과다사용자의 비율 모든 인터넷 사용군에서 채소 섭취 빈도가 일주일 동안 한 번도 없는 경우에 인터넷 과다 사용자가 많았다.. 학습

The National Survey of Substance Abuse Treatment Services (N-SSATS), an annual, national survey of all known substance abuse treatment facilities, both public and private,