IT 프로그래밍/객체지향프로그래밍

메서드 오버라이딩

기술1 2024. 6. 19. 12:47

오버라이딩이란?

베이스 클래스가 가지고 있는 멤버 메스드를 Derived 클래스에서 새로운 함수로 덮어쓰는 것을 오버라이딩입니다.

 

즉 베이스 클래스에서 존재하는 메서드를 파생클래스에 재정의하는 것을 오버라이딩이라고 합니다. 

 

베이스클래스의 오버라이딩할 메서드를 virtual로 선언

virtual string toString() {
	...
    return result;
}

파생클래스에 오버라이딩할 메서드를 다음과 같이 추가:

string toString() override {
	string result = Computer::toString() +
    		"\nScreen size: " + to_string(screenSize) + " inches" + 
            "\nWeight: " + to_string(weight) + " pounds";
    return result;
}

Notebook의 toString() 메서드가 Computer 의 toString() 메서드를 override합니다.

 

   

Computer::toString()

이렇게 해주면 해당 클래스가 아닌 컴퓨터클래스 즉 베이스클래스에서 해당 함수를 가져와서 출력을 해주는 것입니다. 

 

 

virtual 메서드

오버라이딩할 메서드는 virtual 메서드로 선언해주어야 합니다. 

 

생성자와 static 메서드를 제외한 모든 메서드는 virtual 메서드가 될 수 있습니다. 즉 오버라이딩 할 수 있습니다. 파생클래스에서 베이스 클래스의 virtual 메서드를 반드시 오버라이딩 해야 하는 것은 아닙니다. 

 

베이스 클래스에서 virtual로 선언된 메서드는 파생 클래스에서도 virtual 메서드로 간주합니다.

 

파생클래스 객체의 생성

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Point {
public:
	double x, y;
	Point() = default;
	Point(double a, double b) : x(a), y(b) {}
	double dist(Point p) {
		return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
	}
};

class Shape {
private:
	string shape_type;
public:
	Shape() = default;
	Shape(string type) : shape_type(type) {}
	string get_type() {
		return shape_type;
	}
	virtual void print(ostream& out) {
		out << shape_type;
	}
};

이것은 계층구조로 되어 있는 것입니다. 

 

Shape를 중점으로 Rect, Circle을 만들 생각입니다. 

 

class Shape이라는 base 클래스를 하나 정리했습니다. shape는 도형이라는 개념을 설명하는 것입니다. shape에 특정한 데이터 멤버를 포함시키기는 애매합니다. 

 

 

'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글

객체지향프로그래밍 그룹액티비티 7  (0) 2024.06.19
다형성  (0) 2024.06.19
상속이란?  (0) 2024.06.19
컴파일 과정  (0) 2024.06.18
복사생성자  (0) 2024.06.17