카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/05

OOP 계승

계승

하위 클래스는 상위 클래스의 특성을 상속한다.
- 속성(필드 및 속성)
- 운영(방법)

하위 클래스는 상위 클래스를 확장 할 수 있다.
- 새 필드 및 메소드 추가
- 메서드 재정의(기존 동작 수정)

상속에는 많은 이점이 있습니다.
- 확장 성
- 재사용 성
- 추상화 제공
- 중복 코드 제거

Base Class == Parent Class
Derived class == child class
동일한 표현이다.

파생 클래스의 이름 뒤에 기본 클래스의 이름을 지정한다.
public class shape
{...}

public class Circle(자식 프로세스 이름) : shape(부모 프로세스 이름)
{...}
부모 자식 관계 성립

파생 클래스의 생성자에서는 base라는 키워드를 사용하여 base 클래스의 생성자를 호출한다.
public Circle (int x, int y) : base(x)
{...}


Example 1
class Emplyee {
public:
    Employee(string theName, float thePayRate); // 함수 선언

    string getName();   // 함수 선언
    float getPayRate(); // 함수 선언

    float pay(float hoursWorked); //함수 선언

Protected: // 데이터 멤버 선언
string name;
float payRate;
};

Employee::Employee(string theName, float thePayRate) // 소속클래스::멤버 함수 정의 
{
    name = theName;
    payRate = thePayRate;
}

string Employee::getName() // 소속클래스::멤버 함수 정의
{
    return name;
}

float Employee::getPayRate() // 소속클래스::멤버 함수 정의 
{
    return payRate;
}



float Employee::pay(float hoursWorked) // 소속클래스::멤버 함수 정의
{
    return hoursWorked * payRate;




Example 2 (no reuse) 재 사용하지 않고 독립적으로 따로 만든 예제.
class Manager {
public:
    Manager(string theName, float thePayRate, bool isSalaried)

    string getName();
    float getPayRate();
    bool getSalaried();

    float pay(float hoursWorked);

Protected:
    string name;
    float payRate;
    bool salaried;
};

Manager::Manager(string theName, float thePayRate, bool isSalaried) {
    name = theName;
    payRate = thePayRate;
    salaried = isSalaried;
}

string Manager::getName(){
    return name;
}

float Manager::getPayRate()
{
    return payRate;
}

bool Manager::getSalaried()
{
   return salaried;
}


float Manager::pay(float hoursWorked)
{
    if (salaried)
        return payRate;
    /* else */
    return hoursWorked * payRate;
}


Example (with reuse) 재 사용 하는 예제, OOP의 언어를 최대한 사용한 예제.
class Employee {
public:
    Employee(string theName, float thePayRate);

    string getName();
    float getPayRate();

    float pay(float hoursWorked);

protected:
   string name;
   float payRate;
};


#include "employee.h"
class Manager : public Employee {
public:
    Manager(string theName, float thePayRate, bool isSalaried);

    bool getSalaried();
    float pay(float hoursWorked);

protected:
    bool salaried;
};

댓글 없음:

댓글 쓰기