본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]최남식-2011년 11월18일 일일보고서

by 알 수 없는 사용자 2011. 11. 18.
728x90
반응형

제가 잘못 이해한 부분이 많을 수 있습니다. 너무 어려워요 ㅜ.ㅜ. 예리한 지적 부탁 드려요.
 

inline을 이용해 간단히 하기 
(제목을 뭘 붙여야될 지 몰라서 이렇게 올립니다.)
 


-> 대입연산자 부분과 복수 생성자 부분은 위에 빨간 박스부분이 같은 의미를 가지므로 함수로 만들어서 사용하게 되는 경우 프로그램에 직관성이 개선되고 원하는 값을 쉽게 바꿀 수 있다고 한다.

그러므로 빨간 박스부분을 다음과 같이 inline을 사용하여 만들 수 있다.
inline을 사용하게 될 경우는 함수를 호출하는 것이 아니라 그냥 삽입 한 것과 같은 효과를 가진다.
지금은 class에 멤버가 4개밖에 되지 않으므로 효율성을 못 느끼지만 멤버에 수가 많으면 효율적이다.
inline void Init (EMB &r)

      a=r.a;
      b=r.b;
      c=r.c;
      d=r.d;
}

예졔1)
-OBJ객체에 1을 대입하고 컴파일 하면 아래와 같은 에러가 발생한다.


->에러내용은 int를 대입할 방법이 없다. 즉 이것을 지원하는 operator가 없다는 뜻이다.

그러므로 해당하는 대입 연산자를 만들어주어야 한다.



->대입연산자를 만들때 int를 대입하기 위해 B가 1 이므로 (기존에 클래스타입&부분)을 int형으로 바꿔줌으로써 int형 대입이 가능하게 된다.

IT클래스와 상속되어진 EMB클래스에 각각 대입연산자를 만들어준 뒤 a,b,c,d를 출력 해보자.


<실행결과>


예제2)
-함수로 객체를 리턴했을 경우와 아닌 경우에 대해서 알아보자.


-객체를 리턴한 경우


<실행결과>

->실행결과를 보면 객체 생성과 소멸은 main함수내에서 이루어진 것을 볼 수 있다.
그리고 첫번째 객체가 생성되고 리턴하기 전에 복사 생성자가 호출 된 것을 라인표시를 통해서 알 수 있다. 첫번째 객체는 지역객체이고 복사 생성자는 첫번째 객체가 전달 해주어야 되는데 test함수가 끝나면서 소멸되므로 전달을 위해 복사본을 만들어 메인에도 유지되게 한다.
두번째 복사생성자는 main에 들어와서 소멸하게 된다.
 
이처럼 객체를 리턴하게 되면 생성자가 하나 더 호출되므로 참조리턴을 해주도록 해야한다.

예제3)

-> 메모리에 객체를 생성하게되면 디폴트 생성자에 객체에 대한 내용이 바이너리 복사가 되어 하나하나 복사가 이루어질 것이다.
만약  객체가 보안상 다른 객체에 보내지게 되면 안되는 경우에 해결기법으로는 대입연산자를 private 해줌으로써 객체의 복사를 막는다.


cout , ostream 클래스



->우리가 c++에서 출력을 위해 사용하는 cout도 출력 클래스인 ostream으로 정의된 객체이다.
우리가 << 로 많은 타입에 관계없이 쓸 수 있는 것은 <<가 연산자 오버로딩 되어 있기 때문이다.
 

 

->위의 경우는 실제로는 ostream클래스에 operator << (1,2) 이렇게 정의되어 있는 것이다.
우리가 알던 << 연산자는 함수였던 것이다.

예제1)


<실행결과>

-> cout << A  와 operator << (cout, A)가 같은 실행결과를 보여준다.

예제2)



<실행결과>


->OBJ 객체를 생성 인자가 없으므로 디폴트 생성자가 호출되고 내부 print함수가 호출되므로
위와 같이 실행된다.

예제3)

<실행결과>


->에러가 나는 이유는?

-> endl이 출력 되기 위해서는 cout이 되어져야 한다.

->반환형을 ostream &로 해준다.
<실행결과>



이제 EMB를 상속받은 IT에 대한 출력연산자를 만들어보자.



-> IT클래스 내부에 print함수를 선언 해준다.



<실행결과>


 


728x90