성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • ARM Reverse Engineering
  • Boot Code 분석
  • MFC
  • 문자열 나누기
  • WINAPI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이
C++프로그래밍

2013.11.21 _ 상속에서 멤버 함수 재정의(함수오버로딩,함수오버라이딩)

2013.11.21 _ 상속에서 멤버 함수 재정의(함수오버로딩,함수오버라이딩)
C++프로그래밍

2013.11.21 _ 상속에서 멤버 함수 재정의(함수오버로딩,함수오버라이딩)

2013. 11. 21. 10:01

함수 오버로딩                                                                                          

: 함수 이름은 같으나 함수의 매개변수는 다르게 정의하는 것


 함수오버로딩 예제

  // 함수 오버로딩


#include <iostream>
using  namespace  std;

class  TwoNumber
{
  public:
    TwoNumber();
    int AddNumber(const int ia, const int ib);
    double AddNumber(const double da, const double db);
  private:
    int i_sum;
    double d_sum;
};

TwoNumber::TwoNumber()
{
  i_sum = 0; 
  d_sum = 0;
}

int TwoNumber::AddNumber(const int ia, const int ib)
{
  i_sum = ia + ib;
  return i_sum;
}

double TwoNumber::AddNumber(const double da, const double db)
{
  d_sum = da + db;
  return d_sum;
}

int main()
{
  TwoNumber obj1;

  /* 함수 오버로딩 : 함수 인자만 다르고 구별할수 있는 경우*/

  // 정수형 함수가 선택됨 
  cout << "3+4 = " << obj1.AddNumber(3,4) << endl;  

  // 실수형 함수가 선택됨 
  cout << "3.5 + 4.6 = " << obj1.AddNumber(3.5, 4.6) << endl;
  
  return 0;
}

 : 매개변수의 형태에 따라서 호출되는 함수가 달라진다.



함수오버라이딩                                                                                          

: 기반클래스의 멤버함수를 파생클래스에서 다시 정의하는 것


동적결합( Dynamic Binding )

: 프로그램의 실행 or 컴파일시 어떤 함수가 호출될지 결정을하여 적당한 멤버를 참조하는 것 

  이렇게 하나의 함수가 여러가지 구현형태로 정의되는 것을 다형성(Polymorphism) 이라한다.


 함수 오버라이딩 예제

 // 함수 오버라이딩 

#include <iostream>
using  namespace  std;

class  SMARTBASE
{
  public:
    void K()
    {
      cout << "SMARTBASE Class";      
    }
};

class  SMART : public SMARTBASE
{
  public:
    void K()
    {
      cout << "SMART Class";      
    }
};

int main()
{
  SMART obj;

  // 본인의 K 함수가 우선 ( 오버라이딩 )
  obj.K();
  // 스코프 연산자를 사용하면 접근이 둘다 가능하다.
  obj.SMART::K();
  
  return 0;
}
 
 : 기반클래스에 있는 이름과 인자가 동일한 함수가 상속받은 파생클래스에 존재시, 스코프 연산자를 이용해

   두 함수를 구분해서 호출이 가능하다.



 함수 오버라이딩 예제 ( virtual 포함 ) 

  // 함수 오버라이딩 수정 후 소스

#include <iostream>
using  namespace  std;

class  A
{
  public:
     virtual string ClassMessage()  // 가상함수
    {
      return "Class A";
    }
};

class  B : public A
{
  public:
    string ClassMessage()  // 함수 오버라이딩
    {
      return "Class B";  // return 문자열, string 객체 
    }
};

void TestFunction1(A &x)
{  
  // x.ClassMessage() 스트링 객체 
  cout << x.ClassMessage().data() << endl;
}

int main()
{
  A a;
  B b;


  TestFunction1(a);  
  TestFunction1(b);  

  return 0;
}

 : 다른형태로 다형성에 의해 함수를 재정의 하기 위해서는 가상함수(virtual function)를 선언하면 된다.

   기반클래스의 멤버 앞에 virtual 을 추가시킨다.


           결과사진                                                           


: 함수 오버로딩을 통해서 호출한 매개변수의 차이점 과 함수 오버라이딩을 통해서 실행에서 원하는 멤버 함수를 찾아

  호출 되는 것을 확인 할 수 있다.


            실습소스               

131120_Src_12-1.cpp


131120_Src_12-2.cpp


131120_Src_12-3.cpp


131120_Src_12-3.exe

                                      

 

저작자표시

'C++프로그래밍' 카테고리의 다른 글

2013.11.25 _ 연산자 오버로딩 연습 _  (0) 2013.11.25
2013.11.22 _ 연산자 오버로딩 _  (0) 2013.11.22
2013.11.20 _ 상속 예제 연습  (0) 2013.11.20
2013.11.14_ 상속(Inheritance) _ 예제 실습  (0) 2013.11.14
[2013.11.01] C++ _ 자료형과 연산자  (0) 2013.11.01
    'C++프로그래밍' 카테고리의 다른 글
    • 2013.11.25 _ 연산자 오버로딩 연습 _
    • 2013.11.22 _ 연산자 오버로딩 _
    • 2013.11.20 _ 상속 예제 연습
    • 2013.11.14_ 상속(Inheritance) _ 예제 실습
    성엽이
    성엽이

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.