C++은 다른 프로그래밍 언어와는 다르게 연산자를 오버로딩할 수 있는 특징을 가지고 있습니다. 연산자 오버로딩은 사용자 정의 자료형에 대한 새로운 연산자 동작을 정의할 수 있게 해줍니다. 또한, C++은 다형성을 지원하여 같은 연산자를 서로 다르게 구현한 여러 함수 오버로딩을 가질 수 있습니다.
연산자 오버로딩 (Operator Overloading)
C++에서 연산자 오버로딩은 이미 정의된 연산자에 새로운 동작을 정의하는 것을 의미합니다. 예를 들어, 사용자 정의 클래스에 +
연산자가 사용될 때 클래스 객체 간의 덧셈 연산을 정의할 수 있습니다.
다음은 +
연산자를 오버로딩하는 예제입니다:
class Complex {
private:
float real;
float imaginary;
public:
Complex(float r, float i) : real(r), imaginary(i) {}
Complex operator+(const Complex& c) {
return Complex(real + c.real, imaginary + c.imaginary);
}
};
위 예제에서 +
연산자를 오버로딩하여 두 개의 복소수를 더하는 동작을 정의했습니다. 이제 Complex
클래스 객체 간에 +
연산자를 사용하여 덧셈을 수행할 수 있습니다.
다형성 (Polymorphism)
C++은 다형성을 지원하여 같은 이름의 함수 또는 연산자를 여러 형태로 구현할 수 있습니다. 이를 통해 코드의 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다.
다음은 다형성을 이용한 연산자 오버로딩의 예제입니다:
class Shape {
public:
virtual void draw() {
std::cout << "Drawing a shape" << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a circle" << std::endl;
}
};
class Square : public Shape {
public:
void draw() override {
std::cout << "Drawing a square" << std::endl;
}
};
위 예제에서 Shape
클래스의 draw
함수를 가상 함수로 선언하였고, Circle
및 Square
클래스에서 이를 오버라이딩하여 각 도형에 맞는 동작을 정의하였습니다.
이렇게 함으로써 다형성을 통해 draw
함수를 호출할 때 실제 객체의 타입에 따라 적절한 동작을 실행할 수 있습니다.
C++의 연산자 오버로딩과 다형성을 사용하면 프로그램의 유연성과 확장성을 높일 수 있습니다. 이를 통해 더 재사용 가능하고 유지보수가 용이한 코드를 작성할 수 있습니다.
참고 자료: