fullstack

'전체 글'에 해당되는 글 76건

  1. [Unity3D] WWW객체로 Web에 있는 Image 불러오기
  2. [C++] 상속 (Inheritance)
  3. [C++] mutable 키워드

[Unity3D] WWW객체로 Web에 있는 Image 불러오기

Unity

Web에 있는 이미지를 불러오기 위해 WWW객체를 사용한다.

WWW객체는 URL의 내용을 가져오기 위한 유틸리티 모듈이다.


1
2
3
4
5
6
7
public string url = " /* Image url  */ ";
IEnumerator Start()
{
    WWW www = new WWW(url);
    yield return www;
    plane.GetComponent<Renderer>().material.mainTexture = www.texture;
}



Web에 있는 이미지를 불러와 plane에 적용하였다.

[C++] 상속 (Inheritance)

Language/C++

- 상속의 기본 개념


현실 세계에서 부모의 재산을 물려받는 상속과 비슷하게 객체지향에서의 상속은 다른 클래스의 모든 멤버를 물려 받아 지니고 있게 되는 것을 말한다.

이때 상속되는 클래스를 'Base 클래스' 라고 하며, 상속하는 클래스를 'Derived' 클래스라한다. 다른 표현으로 다른 표현으로 부모 클래스와 자식 클래스 혹은 Super 클래스와 Sub 클래스 라고도 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class AAA
{
public:
    void funcA() { cout << "AAA" << endl; }
};
 
class BBB : public AAA
{
public:
    void funcB() { 
        funcA();
        cout << "BBB" << endl;
    }
};



위 코드에서 7번째 줄을 보면 콜론(:)을 이용하여 BBB 클래스가 AAA클래스를 public 상속한 것을 볼 수 있다.

따라서 AAA 클래스의 멤버 함수인 funcA를 BBB클래스에서 자유롭게 쓰고 있는 것을 볼 수 있다.




- 상속하는 클래스의 객체 생성 및 소멸 순서


객체의 생성과 소멸순서를 알아보기 위해 다음과 같이 출력을 해보았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class AAA
{
public:
    AAA() { cout << "AAA Constructor" << endl; }
    ~AAA() { cout << "AAA Destructor" << endl; }
};
 
class BBB : public AAA
{
public:
    BBB() { cout << "BBB Constructor" << endl; }
    ~BBB() { cout << "BBB Destructor" << endl; }
};




위와 같이 생성자는 Base 클래스가 먼저 출력되고 소멸자는 반대로 출력되는 것을 볼 수 있다.

소멸자는 반대로 호출되는 이유는 메모리의 완벽한 해제를 위해서이다.


여기서 중요한것은 생성자가 호출되는 과정인데, 출력만 보면 AAA 클래스의 생성자가 먼저 호출되고 BBB 클래스의 생성자가 호출되는 것 같지만, 사실은 그 반대다.

BBB 클래스의 생성자가 먼저 호출되고 몸체부분은 실행되지 않는다. 다음으로 AAA 클래스의 생성자가 실행되고 나서야 BBB의 몸체부분이 실행되는 것이다.

이걸 제대로 이해한다면 멤버 이니셜라이저(member initializer)를 이용하여 Base 클래스에서 인자가 존재하는 생성자를 올바르게 초기화 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class AAA
{
    int valA;
public:
    AAA(int _val) { valA = _val; }
 
};
 
class BBB : public AAA
{
public:
    BBB(int _val) : AAA(_val) {}
};



12번째 줄에서 멤버 이니셜라이저를 통해 AAA 클래스의 인자가 있는 생성자를 호출하였다.




- public, protected, private 상속


기본적으로 public 상속을 많이 사용하지만 세가지 형태의 상속이 존재한다.

이 상속 형태에 따라 Base 클래스의 멤버가 Derived 클래스로 상속되는 과정에서 접근 권한이 변경된다.

상속되는 과정에 따른 접근 권한 변경은 아래와 같다.



'Language > C++' 카테고리의 다른 글

[C++] 객체 포인터  (0) 2015.12.22
[C++] 상속의 조건. is-a 와 has-a  (0) 2015.12.19
[C++] mutable 키워드  (0) 2015.12.03
[C++] explicit 키워드  (0) 2015.12.02
[C++] static 키워드  (0) 2015.12.02

[C++] mutable 키워드

Language/C++

원래대로라면 const로 멤버 함수가 상수화되면 이 함수는 멤버 변수를 변경시키지 못한다. 그러나 멤버 변수가 mutable로 선언되어 있다면 상수화된 멤버 함수라도 멤버 변수 변경이 가능해진다.

mutable 선언은 되도록 사용하지 않는 것이 좋다고 한다. 어쩔수 없는 경우라면 차라리 함수를 상수화하지 않는 것이 더 나을 수 있다.

아래는 mutable 키워드 사용 예이다.


1
2
3
4
5
6
7
8
9
class AAA
{
    mutable int val;
public:
    void setValue(int _val) const
    {
        val = _val;
    }
};



setValue는 상수화된 멤버 함수이므로 원래대로라면 멤버 변수 val을 변경할 수 없지만 val 이 mutable로 선언되었으므로 값 수정이 가능하다.


'Language > C++' 카테고리의 다른 글

[C++] 상속의 조건. is-a 와 has-a  (0) 2015.12.19
[C++] 상속 (Inheritance)  (0) 2015.12.03
[C++] explicit 키워드  (0) 2015.12.02
[C++] static 키워드  (0) 2015.12.02
[C++] const 키워드  (0) 2015.12.02