본문 바로가기
728x90
cpp 증감 연산자 오버로딩 (전위 연산자, 후위 연산자) 전위 연산자와 후위 연산자가 똑같이 "operator++() {}" "operator--() {}" 형태인데 어떻게 두 개를 구분할까?? 전위 연산자 후위 연산자 파라미터 void int (int 값의 의미는 없고 단지 전위, 후위를 구분하기 위함) 리턴값 객체 자체 임시 객체 속도 빠름 느림 (객체의 새로 만들어 return하기에 속도가 느림) | ✍️ 전위 연산자 예시 // void값을 받으면 전위 연산자임. Fixed& Fixed::operator++(void) { this->setRawBits(this->getRawBits() + 1); return *this; } Fixed& Fixed::operator--(void) { this->setRawBits(this->getRawBits() - 1);.. 2021. 12. 30.
CPP 클래스 상속(Inheritance) 클래스 상속이란? 상속하는 클래스 = 기초 클래스, 부모 클래스 상속받는 클래스 = 파생 클래스, 자식 클래스 class Robot1 { protected: public: private: }; class Robot2:Robot1 { }; 자식 클래스 : 연산자 옆에 어떤 클래스를 상속받을지 작성. protected = private + 자식 클래스의 접근 허용 자식 클래스 특징 반드시 자신만의 생성자를 가져야 됨. 접근할 수 있는 부모 클래스의 모든 멤버 변수, 함수를 가짐. 추가로 멤버 변수, 함수 추가 가능. 자식 클래스의 객체 생성, 소멸 순서 [생성] 부모 클래스 생성자 호출 및 멤버 변수 초기화 -> 자식 클래스 생성자 호출 [소멸] 자식 클래스 소멸자 호출 -> 부모 클래스 소멸자 호출 다중 .. 2021. 12. 22.
cpp 연산자 오버로딩(Operator Overloading) 연산자 오버로딩이란? 기존의 연산자를 재정의하는 것 연산자 오버로딩을 통해 =의 기능을 재정의 해주면, 연산자를 사용할 수 없는 객체가 기본 자료형 변수처럼 덧셈, 뺄셈, 혹은 곱셈과 같은 연산들을 할 수 있음. Robot robot1("hi"); Robot robot2; robot1 = robot2; 2021. 12. 21.
cpp 오버로딩(Overloading) 오버로딩이란? 메서드의 이름은 같지만, 매개변수를 다르게 함으로써 메서드를 여러개 만드는 것 (member function overloading) 함수의 이름은 같지만, 매개변수를 다르게 함으로써 함수를 여러개 만드는 것 (function overloading) c에서는 오버로딩이 존재하지 않아, 같은 기능을 하는 함수여서 매개변수에 따라 다른 이름으로 함수를 만들어야 했다. int sum_int (int a, int b) { return a + b; } double sum_double (double a, double b) { return a + b; } int main() { std::cout 2021. 12. 21.
cpp 복사생성자 (copy constructor) 복사 생성자(copy constructor) 자신과 같은 클래스 타입의 다른 객체에 대한 참조(reference)를 인수로 전달받아 그 참조를 가지고 자신을 초기화하는 방법 // 복사생성자선언 Robot::Robot(const Robot& r) 복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성 가짐 -> 복사 생성자의 대입은 깊은 복사(deep copy)를 통한 값의 복사이기 때문 깊은 복사가 뭔지 모른다면 아래 링크를 클릭! https://developer-eun-diary.tistory.com/entry/cpp-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC cpp 얕은 .. 2021. 12. 21.
cpp 얕은 복사와 깊은 복사 얕은 복사 새롭게 생성하는 객체에 다른 객체의 값을 대입하고 싶을 때 대입 연산자(=)를 사용. Robot robot1("hi"); 특히 객체의 멤버가 메모리 공간의 힙(heap) 영역을 참조할 경우에는 문제가 발생! 깊은 복사 깊은 복사를 하게 되면 새로운 메모리를 할당받아 데이터를 객체에 값을 대입하게 됨. 원하는 값을 받았지만 독립적으로 메모리를 써 문제가 생길 여지가 없음! class Robot { public: char *name; // 생성자 Robot(char* _name) { //공간을 새로 할당해서 데이터를 입력 name = new char[strlen(_name) + 1]; strcpy(name, _name); } // 복사 생성자 - 깊은 복사 Robot(const Robot& r) .. 2021. 12. 21.
728x90