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