const를 쓰는 이유??
멤버 변수 값의 변경을 방지
최대한 많은 곳에 const를 쓰면 안정성이 늘어남
const &를 사용하는 이유??
불필요한 개체의 사본이 생기는 것을 방지
멤버 변수가 바뀌는 것 방지
const는 잘못 사용하면 에러가 나기 쉽다.
하지만 안정성을 위해 최대한 사용할 수 있게 숙달하는 것이 중요하다
연산자 오버로딩에는 const를 사용하지 않는다.
매개변수에 &(참조자)를 사용하면 무슨 차이가 벌어지는가??
Vector Vector::operator+(Vector rhs)
Vector Vector::operator+(Vector& rhs)
위의 경우에는 operator+()영역에 Vector rhs가 생기고 값을 복사해서 영역을 잡은 후 연산한다.
아래의 경우는 operator+()영역에 v2의 주소값을 참조형으로 가져와 가리킨다.
아래의 경우는 주소값으로 한칸만 사용하지만 위의 경우 최소2칸을 사용하게 된다.
즉, 위의 경우가 연산이 더욱 오래걸리며, 메모리도 많이 잡아먹게된다.(복사해야하는 데이터가 많을 수록 심해짐)
오버로딩의 주의사항
1.오버로딩된 연산자는 최소 하나의 사용자정의 형을 가져야한다. (ex)사용자 정의 형 Vector2)
=>기본형으로 할 경우 이미 구현되있는 연산자가 나올 확률이 매우 높다.
2.오버로딩 연산자는 피연산자 수 동일하게 유지
=>반드시 2개 받아야하는 연산자는 2개 받게 유지
3.새로운 연산자 부호 만들기 불가능
=>ex) operator@
4.오버로딩 할 수 없는 연산자가 존재
ex) . .* :: ?: 등등..
연산자 오버로딩 남용X
직관적이지 않은 연산자 오버로딩을 하는거보단 함수를 만들어 사용하자
생성자를 지우는 방법 : private에 클래스이름() {}사용
암시적 복사 생성자를 지우는 방법 : private에 클래스이름(const 클래스이름& 변수) {}
암시적 소멸자 지우는 방법 : private에 ~클래스이름() {}
암시적 operator= 지우는 방법 : private에 const 클래스이름& operator=(const 클래스이름& 변수);
(거의 쓸 일 없음)
상속(생각보다 사용할 일은 적지만 인터페이스를 다루는 경우 쓰인다고한다)
-개념이해는 중요하다
상속이란 부모클래스(베이스클래스)를 가지고 온 후 필요한 것을 추가하는것이다.
ex)부모클래스=동물 자식클래스(파생클래스)=고양이
상속 사용법
class Cat : public Animal => Cat 클래스에 Animal 클래스를 상속한다.
대부분의 상속할경우에는 public을 사용하지만 private와 protected도 사용 가능하다.
public으로 상속할경우
public->public protected->protected private->private
protected로 상속할경우
public->protected protected->protected private->private
private로 상속할경우
public->private protected->private private->private
public보다 protected가 제한적 protected보다 private가 제한적이기 때문
상속한 경우 부모클래스의 생성자가 먼저 호출되고 자식클래스 생성자가 호출된다.