연산자 오버로딩(Operator Overloading) ::
ㄴ 객체 지향 언어에서 사용되는 개념임.
ㄴ 기존의 연산자를 클래스나 구조체 등의 사용자 정의 타입에 맞게 재정의함.
ㄴ 사용자 정의 타입의 객체들간의 연산을 수행할 수 있음.
#include <iostream>
class Vector2D {
private:
double M = 77.20;
double N = 44.52;
public:
double x;
double y;
Vector2D(double x_data, double y_data) : x(x_data), y(y_data) {}
Vector2D operator+(const Vector2D& other) const {
return Vector2D(x + other.x, y + other.y);
}
double Sum() const {
return M + N;
}
};
int main() {
Vector2D v1(1.01, 2.36);
Vector2D v2(0.01, 0.05);
Vector2D v3 = v1 + v2;
std::cout << "v1'x: " << v1.x << std::endl;
std::cout << "v1'y: " << v1.y << std::endl;
std::cout << "v2'x: " << v2.x << std::endl;
std::cout << "v2'y: " << v2.y << std::endl;
std::cout << "v3'x: " << v3.x << std::endl;
std::cout << "v3'y: " << v3.y << std::endl;
std::cout << "Sum(): " << v3.Sum() << std::endl;
return 0;
}
public:
double x;
double y;
클래스 정의에서 public을 private로 선언하면 아래와 같이 private 구조체 호출에서 에러가 발생함.
calling a private constructor of class 'Vector2D' Vector2D v1(1.01, 2.36);
물론, private를 사용해서 클래스에서 사용하는 변수 선언은 가능하다.
Vector2D(double x_data, double y_data) : x(x_data), y(y_data) {}
ㄴ C++에서 생성자를 정의하는 부분임.
ㄴ 생성자는 객체가 생성될 때 "객체의 초기화'를 담당함.
ㄴ 생성자는 x_data, y_data를 매개변수로 받아들여 x, y 멤버변수를 초기화함.
여기서 사용된 : x(x_data), y(y_data) 부분은 초기화 리스트(init list)라고 한다.
생성자들의 선언 뒤에 콜론(:)을 붙이고 그 뒤에 초기화하려는
멤버 변수와 초기화할 값들을 나열하는 형태로 구성한다.
x(x_data), y(y_data)는 x변수를 x_data로, y변수를 y_data로 초기화한다.
Vector2D operator+(const Vector2D& other) const {
return Vector2D(x + other.x, y + other.y);
}
위 코드가 연산자중 (+)를 오버로딩하는 함수다.
Ventor2D 클래스 객체에 대해 두 객체를 더한 결과를 리턴한다.
operator+ 이 함수가 연산자 오버로딩 함수다.
const Vector2D& other 함수는 Vector2D 객체를 인자로 받는다.
const 참조로 받는다는 의미는 객체 변경없이 받는다는 의미다.
main() 함수에서
Vector2D v1(1.01, 2.36);
Vector2D v2(0.01, 0.05);
Vector2D v3 = v1 + v2;
와 같이 정의할 수 할 수 있는 이유는 Vector2D 클래스를 받은 v1과 v2, v3를
만들고 v3에서 Vector2D v1과 Vector2D v2를 + 할 수 있다.
결과는 아래와 같다.
'코딩 테크닉 > C 코드 테크닉' 카테고리의 다른 글
CAN 통신에서 자동차 속도값 읽는 방법 (0) | 2024.05.19 |
---|