멍멍이네 블로그

class A를 선언한 스크립트,
class B 선언한 스크립트가 있을때


[RequireComponent(typeof(A))]
class B
{

}


이렇게 class B를 선언하기 전에 RequireComponent시키면 class A가 어태치된다

 

--------------------------------------------------

 

class Test
{
      public int number;
     
      public Test(int n)
      {
            number = n;
       }
}

위와 같은 클래스가 있을 때,

 

void main()
{
      Test t;
      Test t1(5);

      cout « t.number;
      cout « t1.number
      t = 10;
      coun « t.number;
}

 

문제1. cout으로 number를 출력하고 있는데 C#과 C++에서는 값이 어떻게 나오는지 써보시오.

 

C++일 경우 0 5 10 나온다.

C#일 경우 C#일 경우 t = 10에서 에러 호출낸다.

 

문제2. 그러면 C++에서 t = 10; 구문을 t = 10.0; 으로 바꿀 경우 어떻게 될까?

 

위와 같이 출력됨.

 

 

 

문제 1과 2의 이유

C#은 암시적형변환을 안해줘서 무조건 형이 다르면 에러를 띄우고, C++ 특성 상 암시적 형변환이 발동돼서 값을 받는게 실수형의 생성자가 없어서 컴파일러가 암시적으로 int형으로 형변환 시켜버려서 호출되는것이다.

 

----------------------------------------------------------------------------

 

그럼 내가 생성자에서 int형을 받는데 무조건 int형만 받을려고 할려면 생성자를 어떻게 해야될까??

생성자를 만들때

 

public explicit Test(int n)

 

이렇게 explicit 이 키워드를 사용하면 매개변수 타입이 현재 int형인데 float형이 들어오면 오류를 띄우게 하는거

무조건 int형만 받겠다는 의미로 이 키워드를 사용한 메소드는 암시적 형변환을 시도 안하겠다는 의미로 사용하는것이다.

 

하지만 강제적 형변환으로 해서 접근할 수 있다.

 

explicit Print(int n) { n을 받아서 출력 }

 

Print(10) 이렇게 하면 10을 호출하겠지만, 만약에 Print(10.5) 라고 써야될 경우

 

Print((int)10.5)

 

강제적 형변환을 해서 넘겨주면 된다.