대입연산자의 다중정의
a=b; 에서 a가 자기자신객체 , b가 매개변수로 전달됨.
데이터의 길이를 나타내는 항목이있고
깊은복사를 해야함

이동대입 연산자
좌측피연산자에 대입할 우측 피연산자가 rvalue일때 사용됨 ( 대입후 우측 피연산자의 내용이 더 이상 필요없는 상황)
우측 피연산자의 내용을 좌측피연산자로 이동하여 불필요한 복사를 하지 않아도 되게 함

&&를 넣어서 rvalue참조를 받게 함
const는 없다 우측피연산자의 내용이 바뀌기 때문.

대입연산자에의해 v1가 깊은복사로 v3로복사됨
이동대입 연산자가 발동되면 아래와되고 이후 ,임시객체의 소멸자가 작동되서 v1.add(v2)는 없어짐

std::move 함수의 활용
swap함수를 구현할때. 이동 대입 연산자를 이용하면 효율적으로 구현가능
인수로 전달되는 객체의 rvalue참조를 반환한다.

아래와같이 lvalue를 받아서 move함수로 내부에서 rvalue참조로 바꿔줘서 이동이 이룯어짐


[ ] 연산자의 다중정의
a[5] 에서 a가 첫번째 피연산자 , 5는 첨자로 두번째 피연산자가 된다.
SafeIntArray는 내가 만든 클래스이고
좌측 피연산자는 *this이고 두번째 첨자는 i로 전달될것.

이 연산자에 의해 지정되는 데이터공간의 참조를 반환하게끔. int&로 한다

이것은 그냥 값을 리턴하는거니까 int라고 적는다.


friend 복습

자료형의 변환

MyString&& mstr (이동 대입 연산자)이 필요한가?
MyString&& mstr은 **Rvalue(임시 객체)**를 처리하기 위해 필요합니다. 묵시적 형 변환 과정에서 임시 객체가 생성될 수 있으므로, 이동 대입 연산자가 이를 최적화된 방식으로 처리합니다.
묵시적 형 변환이 이동 대입 연산자와 관련 있는 경우:
- "Programming" 리터럴이 const char*로 시작합니다.
- MyString 생성자를 통해 "Programming"이 임시 MyString 객체로 변환됩니다.
- 이 임시 객체는 이후 **대입 연산자(=)**로 처리됩니다:
- 복사 대입 연산자가 호출되면, 기존 객체에 데이터를 복사합니다.
- 이동 대입 연산자가 호출되면, 기존 객체에 데이터를 이동(소유권 이전)하여 복사의 오버헤드를 줄입니다.
이동 대입 연산자와 복사 대입 연산자의 차이:
- 복사 대입 연산자는 데이터를 복사합니다. 원본 객체는 그대로 유지됩니다.
- 이동 대입 연산자는 데이터를 이동하여 원본 객체는 비워지고, 임시 객체의 리소스를 재사용합니다.
형변환 연산자를 정의하는 위치
char*스타일로 바꿈. 형변환하겠다는 의미



묵시적형변환이 이루어지지 않게 하려면?

반드시 명시적으로 지정해줘야함

2번은 static_cast로 MyString으로 형변환하라는 뜻
class MyString {
int len, bufSize;
char* buf;
public:
……
bool operator >= (const MyString& mstr) const
{ return ㈀ ; }
};
위 지문은 MyString 클래스의 관계연산자 >=를 다중정의한 것이다. ㈀에 넣을 적절한 문장은?
class Pencils {
int dozen; // 타
int np; // 낱개
public:
……
㈀
{ return dozen * 12 + np; }
};
'수업 > C++' 카테고리의 다른 글
11. 상속- 가상함수(virtual),업캐스팅,다운캐스팅 (1) | 2024.11.28 |
---|---|
10상속 - 생성자와 소멸자, 가시성지시어 (0) | 2024.11.26 |
8,9연산자 다중정의 (0) | 2024.11.25 |
7.클래스와 객체 -임시객체,묵시적형변환,위임생성자 ,초기화리스트생성자 (0) | 2024.11.25 |
5,6 클래스와 객체 (const, 생성자,소멸자,rvalue참조,static) (4) | 2024.11.13 |