순서

I. Parameter(ref, out)
II. Operator Overloading

 


I. Parameter(ref, out)

parameter로 ref 혹은 out 변수를 붙일 수 있다.

static void Main() {
  int a = 1;
  int b;
  myFunction(ref a, out b);
  
public void myFunction(ref int A, out int B)

ref 매개변수 경우에는 Caller 쪽에서 반드시 초기화 혹은 할당을 해주어야 하고,
    -> Callee에서는 상관 X
out 매개변수 경우에는 Callee 내부에서 반드시 초기화 혹은 할당을 해주어야 한다.
    -> Caller에서는 상관 x

그리고 전달 시 둘 다 Call By Reference로 전달된다.

 


II. Operator Overloading

 

사실 이 연산자 오버로딩은 큰 프로젝트로 데이터 클래스, 구조체를 만들어 사용할 때 매우 중요하다.

로봇 프로젝트의 경우에도 Eigen에서 지원하는 Matrix4d, Vector6d 등을 모아
User Class를 만들고 연산자 오버로딩을 통해서 HT Matrix를 계산했다.

연산자 오버로딩은 내가 임의로 연산자의 기능을 정의하는 것으로

가능한 연산자는 아래와 같고 무조건 쌍으로 구현해야 하는 것들도 있다.

단항 연산자 + , -,  !,  ~,  ++,  --,  true, false
이항 연산자 *,  /,  %,  |,  <<,  >>
비교 연산자 ==, !-, <, >, <=, >= 

  public class A {
    public int data;
    public string name;
  }
  // operator 정의법
  public static A operator + (A a1, A a2) {
    A a3 = new A();
    a3.data = a1.data + a2.data;
    a3.name = a1.name + " " + a2.name;
    return a3;
  }
  
  static void Main() {
    A A1 = new A();
    A A2 = new A();
    A1.data = 1;
    A2.data = 2;
    A1.name = "Mr.";
    A2.name = "Park";
    Console.WriteLine($"{(A1+A2).data}, {(A1+A2).name)}");
  }

 

위의 정의를 통해 A1+A2처럼 클래스에 대한 연산을 수행할 수 있다.

+ Recent posts