728x90

c++ 100

9. 연산자 오버로딩

함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공한다 - 이름은 하나지만 기능은 여러가지 연산자 또한 가능하다 ‘operator’ 키워드와 ‘연산자’를 묶어서 함수의 이름을 정의하면, 함수의 이름을 이용한 함수의 호출뿐만 아니라, 연산자를 이용한 함수의 호출도 허용 연산자를 오버로딩 하는 두 가지 방법 멤버함수에 의한 연산자 오버로딩 전역함수에 의한 연산자 오버로딩 동일한 자료형을 대상으로 +연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우, 멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출 오버로딩이 불가능한 연산자의 종류 . - 멤버 접근연산자 .* - 멤버 포인터 연산자 :: - 범위 지정 연산자 ?: - 조건 연..

언어/C++ 2023.02.02

가상(Virtual)의 원리와 다중상속

가상(Virtual) 객체가 생성되면 멤버변수는 객체 내에 존재하지만, 멤버함수는 메모리의 한 공간에 별도로 위치하고선, 이 함수가 정의된 클래스의 모든 객체가 이를 공유하는 형태를 취한다. 오버라이딩 된 가상함수의 주소정보는 유도 클래스의 가상함수 테이블에 포함되지 않는다. 가상함수 테이블에 의한속도의 저하 클래스에 가상함수 포함되면, 가상함수 테이블이 생성되고, 또 이 테이블을 참조하여 호출될 함수가 결정되기 때문에 실행속도가 감소한다. 하지만 그 속도의 차이가 극히 미미하다 다중상속(Multiple Inheritance) 둘 이상의 클래스를 동시에 상속하는 것 논란이 많은 문법 득보다는 실이 더 많다 기본문법에서 제외되어야한다. 일반적인 경우 다양한 문제를 동반하지만 제한적인 사용까지 부정할 필요는..

언어/C++ 2023.01.31

8. 상속과 다형성

객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수 클래스 포인터는 포인터 객체뿐만 아니라, 클래스를 상속하는 유도 클래스의 객체도 가리킬 수 있다 C++에서, AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다.(객체의 주소 값을 저장할 수 있다.) 함수 오버라이딩(Function Overriding) - 함수 재정의 오버라이딩이 된 기초 클래스의 함수는, 오버라이딩을 한 유도 클래스의 함수에 가려진다. C++ 컴파일러는 포인터 연산의 가능성 여부를 판단 할 때, 포인터의 자료형을 기준으로 판단하지, 실제 가리키는 객체의 자료형을 기준으로 판단하지 않는다. 포인터 형에 해당하는 클래스에 정의된 멤버에만 접근이 가능하다. 가상함수의 선언은..

언어/C++ 2023.01.26

7. 상속(Inheritance)의 이해

기능의 처리를 실제로 담당하는 클래스 - ‘컨트롤(Control) 클래스’ 또는 ‘핸들러(Handler) 클래스’ A 클래스가 B 클래스를 상속하게 되면, A 클래스는 B 클래스가 지니고 있는 모든 멤버를 물려받는다. 즉, A 객체는 A 클래스에 선언된 멤버 외 B 클래스에 선언 된 멤버도 존재하게 된다. A 클래스 상위 클래스 기초(Base) 클래스 슈퍼(Super) 클래스 부모 클래스 B클래스 하위 클래스 유도(Derived) 클래스 서브 클래스 자식 클래스 기초와 유도라는 말을 자주 사용한다. 유도 클래스의 객체생성 과정에서 기초 클래스의 생성자는 100% 호출된다 유도 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스의 void 생성자가 호출된다. 클래스 멤버는 해당 ..

언어/C++ 2023.01.26

6. 클래스의 완성

정보은닉(Information Hiding) 프로그래머가 실수를 했을 때, 이는 어떻게든 발견되어야 한다. 제한된 방법으로의 접근만 허용해서 잘못된 값이 저장되지 않도록 도와야 하고, 또 실수를 했을 때, 실수가 쉽게 발견되도록 해야 한다. 멤버변수를 private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서 ,안전한 형태로 멤버 변수의 접근을 유도하는 것이 바로 ‘정보은닉’ const 함수 이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다 const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되면, 컴파일 에러가 발생한다. const 함수 내에서는 const가 아닌 함수의 호출이 제한된다. 캡슐화(Encapsulation) 하나의 목적 하에 둘 이상의 기능이 ..

언어/C++ 2023.01.19

5. 연산자 다중정의

연산자 함수 연산자를 이용하듯 호출할 수 있는 메서드 산술 연산자 operator int () - 형 변환 연산자 a operator +(const a &b) - 덧셈 연산자 a& operator=(const a &b) - 단순 대입 연산자 대입 연산자 = 복합 대입 연산자 += 배열 연산자 [] 관계 연산자 ==, ≠ 보통 strcmp 로 구현 단항 증감 연산자 ++, -- 전위 연산자 ++a - 바로 return 증가한 뒤 그 값을 리턴 후위 연산자 a++ - 값을 증가시키기전 백업 후 증가. 백업 값을 리턴

언어/C++ 2023.01.17

4. 복사 생성자 & 임시객체

복사 생성자 객체의 복사본을 생성할때 호출되는 생성자 복사될 원본에 const를 붙여서 원본이 손상되는 일 방지 깊은 복사 , 얕은 복사 깊은 복사 - 복사에 의해 두개의 값 생성 얕은 복사 - 대상의 값은 하나 접근 포인터만 2개 얕은 복사의 경우 이미 삭제된 메모리를 한번 더 삭제하려 하면 오류 발생 대입 연산자 단순 대입 → 얕은 복사 실행 대입 연산자 다중정의로 깊은 복사 수행하도록 작성 변환 생성자 explicit 예약어로 차단 가능 이름없는 임시 객체 객체를 return 하는 경우 임시 객체가 복사생성자로 생겼다 사라짐 r-value 참조 연산에 따라 생성된 임시객체 기본 자료형 말고, 클래스에 적용될 때 필요 이동 시맨틱 이동 생성자 + 이동 대입 연산자

언어/C++ 2023.01.17

3. 클래스

객체 지향 프로그래밍 클래스 기본 문법 생성자 / 소멸자 생성자는 다중정의 가능 소멸자는 불가능 만들어놓지 않더라도 컴파일러가 디폴트 생성자, 소멸자를 만들어 놓음 접근 제어 지시자 클래스 - 기본 Private 구조체 - 기본 Public 전역변수로 선언한 클래스의 생성자는 main보다 먼저 호출 동적 객체의 생성과 소멸 new[]로 생성한 것은 delete[]로 삭제해야 한다 ( 안할시 메모리 릭 ) 참조 형식 멤버 초기화 참조자는 선언과 동시에 초기화 해야한다. 그래서 생성자 초기화 목록을 써야한다. 생성자 다중 정의 C++11 부터 생성자 위임 가능 생성자 위임 - 생성자 초기화 목록에서 다른 생성자 추가로 호출 같은일을 하는 코드가 여러번 있을 필요 X 명시적 디폴트 생성자 선언과 정의를 한번에..

언어/C++ 2023.01.16

2. C++ 함수와 네임스페이스

디폴트 매개변수 호출자만 보고 함수 원형 추측 불가 반드시 오른쪽 매개변수부터 기술 함수 다중정의 오버로딩( 함수의 매개변수가 달라지는 등 ) 다형성을 제공한다. 함수 템플릿 오버로딩 VS 함수 템플릿 오버로딩 - 유지보수 측면에서 문제. 불필요한 코드 작성시 메모리 낭비. 함수 템플릿 - 컴파일러가 생성. 컴파일 시간 UP 인라인 함수 함수 호출로 인한 오버헤드 극복 오버헤드 - 스택메모리 UP ,매개변수 때문에 메모리 복사 최적화 옵션을 켜두면 컴파일러가 알아서 결정해준다. 네임스페이스 협업중, 다른 개발자와 변수명이 겹치는 문제 해결 using 선언 자주 사용하는 네임스페이스 생략 네임 스페이스 중첩 네임 스페이스 안에 또 다른 네임스페이스 속할 수 있다. A::B::C 와 A::D 이런식으로 구별..

언어/C++ 2023.01.16

1. C와 C++ 차이

C++ 객체지향 프로그래밍 C++에서는 사용자 정의 헤더가 아닌, 표준 헤더들은 .h 생략 _tmain은 유니코드를 지원하기 위해 재선언 됨 인스턴스 변수와 같은 의미 ex) int a → int 자료형에 대한 인스턴스 a 자료형 C와 기본적으로 같다 auto, decltype(expr) 추가 auto 초기값 형식에 맞추어 선언하는 인스턴스 형식이 자동으로 결정 범위 기반 for문에서 활용 컴파일 시점에 항을 보고 변수의 타입을 결정. 그래서 초기화가 의무적이다. 메모리 동적 할당 new와 malloc 차이(메모리 크기 지정 안해도 됨) new[]로 생성한건 delete[]로 삭제 (동적 할당 객체와 객체의 배열은 구조가 다르기 때문에 메모리누수(Memory Leak)가 발생할 수 있다 참조자 형식 포인..

언어/C++ 2023.01.16
728x90