Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

미시Cpp/0406: Difference between revisions

From ZeroWiki
imported>장용운
No edit summary
imported>computer6561
No edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 30: Line 30:
* []연산자 오버로딩
* []연산자 오버로딩
* 대입 연산자 오버로딩
* 대입 연산자 오버로딩
* ★(C++11)Rvalue reference
* ★(C++11)RValue reference
* ★(C++11)Move semantics
* ★(C++11)Move semantics
  ○ Move constructor
  ○ Move constructor
Line 44: Line 44:
== 내용 ==
== 내용 ==


== 코드 ==
* Feature
** Chess Rule
** 2-Player-Played
** Console UI
** FIle I/O
 
* 연산자 오버로딩
class A{
      friend A& operator=; //4번
     
      A& operator=(int n){
           
      }//1번
      A& operator=(class A&){
           
      }//2번
};
A& operator=(int n, class A&){
           
      }//3번
 
** 1번
** 2항 연산의 뒷부분 피 연산자가 숫자일 경우
** 2번
** 2항 연산의 뒷부분 피 연산자가 자기 자신(같은 형식)일 경우
** 3번
** '3+a'와 같은 앞부분 피 연산자가 객체일 경우, 1번 식을 선언 함으로써 사용
** 4번
** friend를 이용해 3번의 전역 함수를 friend로 선언해 줘야 사용 가능
** 생성자(소멸자), 복사 생성자, 대입 연산자 오버라이딩 메소드는 C++가 만드므로 항상 조심해줘야 하며 항상 확인해야 한다.
** ~~스테이크를 시켰더니 스테이크 제료가 나왔다. 근데 왠지 레스토랑에서 제공한 소스가 상한 것 같아 열어보니 상해 있다...랄까~~


* Rvalue
** Lvalue : 값을 대입하고 쓰는 데 의미가 있어야 한다
** Rvalue : 이름이 없다. 고로 의미가 없다.
** 대입연산자 좌측에 절대 올 수 없는 값
** TO(Temporary Object, 임시 객체) 또한 Rvalue
** 이름이 없는 객체. 나중에 알려주세요
** 객체를 return by value 할 때, 객체를 생성하지 않고 클래스를 바로 인스턴스화 할 때 생성


* Rvalue Reference
** 아 쓰기 힘들어
* Move semantics
** 너도....
** 아마 임시 객체의 copy는 deep copy를 할 필요는 없는 것 같다...
** 다만 임시 객체의 할당된 공간을 그냥 없애자...
** 대입 연산자(인자는 Rvalue)로 발동
** operator=(A&&){} << 이렇게 받는다.<<이게 바로 이동 대입 연산자... ~~이름하야 열.파.참.~~
** 이동 생성자로도 발동
== 코드 ==
* 연산자 오버로딩
class Point
{
private:
int x, y;
public:
Point operator+ (const Point&amp; p);
};
Point Point::operator+ (const Point&amp; p)
{
//....
}
// [point].operator+([otherPoint]) 식으로 함수를 호출한다고 생각하면 된다.
// std::cout 등에서 볼 수 있는 &lt;&lt; 같은 것도 사실 연산자 오버로딩이라고 합니다.
* 비메서드적 연산자 오버로딩
class Point
{
private:
int x, y;
public:
friend Point operator+ (const Point&amp; p1, const Point&amp; p2);
};
Point operator+(const const Point&amp; p1, const Point&amp; p2)
{
// ....
}
// 이 때, operator+ 함수가 전역 함수임에 유의하자.
// friend가 그나마 유용한 희귀 케이스.
// p1 + p2는 operator+(p1, p2)로 해석된다.
* 인덱싱 오버로딩
class String
{
private:
char * content;
public:
char&amp; operator[] (int index);
};
// 함수 구현 방법은 같다.
// 대입 연산자 오버로딩도 마찬가지!
* Rvalue Reference
void main(void)
{
int&amp;&amp; rRef = (4 + 5);
}
// rValue를 참조함. 위 문장이 지나갈 때 (4 + 5)가 스택에서 사라짐에 주목.
* Move semantics
class Test
{
public:
Test(Test&amp;&amp; rhs);
};
// 문법적인 부분.
= 잡담 =
= 잡담 =
*
* 이 친구의 필기 실력을 따라 잡을 수 없다.... ~~(이 친구의 실력을 따라 잡을 수 없다!!!!)~~
 
----
---------------------------------------------------------------------
[[활동지도/2015]]
[[활동지도/2015]]
[[미시Cpp]]
[[미시Cpp]]



Latest revision as of 23:19, 1 June 2015

  연산자 오버로딩을 발동합니다
  템플릿 은하계까지 남은 시간 : 1주

미시Cpp

회차 : 4회차 시간 : 11시 30분 ~ 장소 : 6층 학회실

참가원

멘토 장용운 미시행
멘티 유재범 미시행
신형철 미시행

이번에 배울 것

  • 연산자 오버로딩
○ 종류
○ 선언과 정의
○ 비 메서드적 연산자 오버로딩
  • std::cout, std::cin, std::endl
  • []연산자 오버로딩
  • 대입 연산자 오버로딩
  • ★(C++11)RValue reference
  • ★(C++11)Move semantics
○ Move constructor
○ Move assignment operator

실습

  • 체스 프로그램 클래스 디자인
○ 기능 명세
○ 구조 디자인
○ 프로토타입

스터디 진행

내용

  • Feature
    • Chess Rule
    • 2-Player-Played
    • Console UI
    • FIle I/O
  • 연산자 오버로딩
class A{
      friend A& operator=; //4번
      
      A& operator=(int n){
            
      }//1번

      A& operator=(class A&){
            
      }//2번
};

A& operator=(int n, class A&){
            
      }//3번
    • 1번
    • 2항 연산의 뒷부분 피 연산자가 숫자일 경우
    • 2번
    • 2항 연산의 뒷부분 피 연산자가 자기 자신(같은 형식)일 경우
    • 3번
    • '3+a'와 같은 앞부분 피 연산자가 객체일 경우, 1번 식을 선언 함으로써 사용
    • 4번
    • friend를 이용해 3번의 전역 함수를 friend로 선언해 줘야 사용 가능
    • 생성자(소멸자), 복사 생성자, 대입 연산자 오버라이딩 메소드는 C++가 만드므로 항상 조심해줘야 하며 항상 확인해야 한다.
    • ~~스테이크를 시켰더니 스테이크 제료가 나왔다. 근데 왠지 레스토랑에서 제공한 소스가 상한 것 같아 열어보니 상해 있다...랄까~~
  • Rvalue
    • Lvalue : 값을 대입하고 쓰는 데 의미가 있어야 한다
    • Rvalue : 이름이 없다. 고로 의미가 없다.
    • 대입연산자 좌측에 절대 올 수 없는 값
    • TO(Temporary Object, 임시 객체) 또한 Rvalue
    • 이름이 없는 객체. 나중에 알려주세요
    • 객체를 return by value 할 때, 객체를 생성하지 않고 클래스를 바로 인스턴스화 할 때 생성
  • Rvalue Reference
    • 아 쓰기 힘들어
  • Move semantics
    • 너도....
    • 아마 임시 객체의 copy는 deep copy를 할 필요는 없는 것 같다...
    • 다만 임시 객체의 할당된 공간을 그냥 없애자...
    • 대입 연산자(인자는 Rvalue)로 발동
    • operator=(A&&){} << 이렇게 받는다.<<이게 바로 이동 대입 연산자... ~~이름하야 열.파.참.~~
    • 이동 생성자로도 발동

코드

  • 연산자 오버로딩
class Point
{
private:
	int x, y;

public:
	Point operator+	(const Point& p);
};

Point Point::operator+ (const Point& p)
{
//....
}

// [point].operator+([otherPoint]) 식으로 함수를 호출한다고 생각하면 된다.
// std::cout 등에서 볼 수 있는 << 같은 것도 사실 연산자 오버로딩이라고 합니다.
  • 비메서드적 연산자 오버로딩
class Point
{
private:
	int x, y;

public:
	friend Point operator+ (const Point& p1, const Point& p2);
};

Point operator+(const const Point& p1, const Point& p2)
{
	// ....
}

// 이 때, operator+ 함수가 전역 함수임에 유의하자.
// friend가 그나마 유용한 희귀 케이스.
// p1 + p2는 operator+(p1, p2)로 해석된다.
  • 인덱싱 오버로딩
class String
{
private:
	char * content;

public:
	char& operator[] (int index);
};
// 함수 구현 방법은 같다.
// 대입 연산자 오버로딩도 마찬가지!
  • Rvalue Reference
void main(void)
{
	int&& rRef = (4 + 5);
}
// rValue를 참조함. 위 문장이 지나갈 때 (4 + 5)가 스택에서 사라짐에 주목.
  • Move semantics
class Test
{
public:
	Test(Test&& rhs);
};

// 문법적인 부분.

잡담

  • 이 친구의 필기 실력을 따라 잡을 수 없다.... ~~(이 친구의 실력을 따라 잡을 수 없다!!!!)~~

활동지도/2015 미시Cpp