• 검색 결과가 없습니다.

 사용(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{

};

참조

관련 문서

According to KOSIS (2020), the national government provided 71.2% of the public rental housing stock through its agency, Korea Land and Housing Corporation (LH) 1 ,

base 클래스의 접근 제어와 protected 멤버 상속 관계에서의 생성자와 소멸자.. 함수 재정의(function overriding) 디폴트 액세스 지정자와

Ø 객체 또는 클래스명을 통해 접근 가능 (단, public인 경우에 한함) Ø 변수 생성을 위해서는 초기화 과정 필수. n

setf와 unsetf 멤버 함수를 이용한 입출력 형식 지정 setf 이외의 멤버 함수를 이용한 입출력 형식 지정 입출력 조작자를 이용한 입출력 형식 지정.. 사용자

이는 global rules, private rules, tags 그리고

생성자와 소멸자의 호출 순서 디폴트 생성자와 디폴트 소멸자 멤버 초기화. 멤버

자바에서 처리하는 예외는 모두 Exception 클래스에서 파 Exception 클래스는 Throwable 클래스의 하위 클래스임 결국 모든 예외 클래스가 Throwable의 하위

수퍼클래스가 아닌 현재 클래스의 지정된 초기자 호출 초기화 작업을 변경하고 싶으면 지정된 초기자만 변경 지정된 초기자에서만