c++35 C++ 언어 기초 (13) - 추상클래스, 다중상속 ▣ 추상 클래스 ● 추상 클래스, 상세 클래스 ▷ 추상 클래스, abstract class 유사한 성격을 가지는 클래스들의 공통적인 요소를 뽑아 만든 클래스로, 일부 메소드가 구체적으로 구현되어 있지 않아 직접적인 사례가 존재하지 않는 클래스를 말한다. 추상 클래스로 객체를 직접 정의할 수 없다. 추상 클래스는 그 자체로 사용되지 않고 파생 클래스를 통해 구현되어 사용된다. 사용 목적: 정 그룹에 속하는 클래스들(파생 클래스들)이 반드시 갖고 있어야하는 행위를 지정해서 필요한 행위를 잊지 않고 정의하도록 하기 위함 ▷ 상세 클래스, concrete class 클래스의 모든 요소가 구체적으로 구현되어 직접적인 사례가 존재하는 클래스다. 상세 클래스는 객체를 정의할 수 있다. ▷ 예시 - Shapes 클래스.. 2020. 9. 4. C++ 언어 기초 (11) - 상속; 기초/파생클래스, 접근 제어, final, name binding ▣ 기초 클래스와 파생 클래스 ● 클래스의 상속 (inheritance) ▷ 공통적인 멤버를 포함하는 유사한 유형의 클래스 ▷ 일반화와 특수화를 통한 클래스 계층구조 설계 공통적인 멤버로 구성된 클래스를 기초 클래스, 기초 클래스로부터 상속받는 클래스를 파생 클래스라고 한다. 코드의 중복을 방지할 수 있다. ● 파생 클래스 선언 ▷ 파생 클래스 선언 형식 class DClassName : visibilitySpec BClassName { visibilitySpec_1: 데이터 멤버 또는 멤버함수 리스트; visibilitySpec_2: 데이터 멤버 또는 멤버함수 리스트; ... }; // DClassName: 파생 클래스 이름 // BClassName: 기초 클래스 이름 // visibilitySpec:.. 2020. 9. 3. C++ 언어 기초 (10) - 연산자 다중정의 II ▣ 대입 및 이동 대입 연산자 ● 대입 연산자( = )란? ▷ 묵시적 대입 연산자: 오른쪽 피연산자 데이터 멤버를 왼쪽 피연산자에 그대로 복사 ▷ 객체에 동적할당된 메모리를 가리키는 포인터가 포함되어 있으면 -> 얕은 복사로 인해 의도하지 않은 공유 상태의 문제가 발생할 수 있다. -> 깊은 복사를 할 수 있게 대입 연산자를 다중정의 해야 한다. ● 대입 연산자 다중정의 예시 ▷ VecF 클래스 VecF& VecF::operator=(const VecF& fv) { //VecF& 참조로 반환한다. if (n != fv.n) {//벡터의 크기가 다르면 delete[] arr;//기존 메모리 반환 arr = new float[n = fv.n];//새로 메모리 할당 } memcpy(arr, fv.arr, si.. 2020. 9. 3. C++ 언어 기초 (9) - 연산자 다중정의 ▣ 연산자 다중정의? ● 연산자 다중정의란? ▷ C++에 정의된 연산자를 사용자가 선언한 클래스 객체에서 사용할 수 있게 정의하는 것을 말한다. ● 연산자 다중정의 규칙 ▷ 연산자의 의미를 임의로 바꾸면 안된다. 예를 들어, 덧셈을 뺄셈으로 바꾸는 행위는 안된다. ▷ '연산자의 우선순위'나 '피연산자 수'와 같은 연산자의 고유한 특성이 유지되도록 만든다. ● 연산자 다중정의를 사용하는 경우 ▷ 클래스의 객체 간 대입/이동 대입 연산자의 경우 ▷ 수치형 객체의 산술 연산자 ▷ 두 객체를 비교하기 위한 관계 연산자 ▷ 스트림 입출력을 위한 >> 와 2020. 8. 31. [C++] 위임 생성자, 초기화 리스트 생성자 ▣ 생성자 처리 위임 ● 위임 생성자(delegating constructor) 선언 ▷ C++11 이후에 생긴 생성자 ▷ 생성자 작성 코드의 중복을 줄이는 효과가 있다. ▷ 초기화 리스트에 앞에서 선언됐던 생성자를 사용해서 새로운 생성자를 선언하게 한다. 위임 생성자: 앞에서 선언된 생성자를 이용하여 선언되는 생성자 타겟 생성자: 위임의 대상이 되는 생성자 ● 예시 - VecF 클래스 .... class VecF { int n; float *arr; public: VecF(int d, float* a=nullptr) : n{ d } { arr = new float[d]; if (a) memcpy(arr, a, sizeof(float) *n); } /*복사 생성자*/ VecF(const VecF& fv).. 2020. 8. 29. [C++] 복소수 Complex 연산 클래스 만드는 방법 ▣ 복소수(complex number) ● 복소수는 실수부와 허수부로 구성된다. ▷ 복소수의 표현 : a + jb ( a : 실수부 값, b : 허수부 값) ● 켤레복소수 (complex conjugate) ▷ 켤레복소수의 표현 : a - jb (허수부의 부호가 반대) ● 복소수 연산 ▷ 덧셈은 쉬우니까 넘어가고 ▷ 곱셈은 (a + jb)(d + je) = (ad - be) + j(ae + bd) ▷ 나눗셈은 (a + jb) / (d + je) = (ad + be) / (d^2+e^2) + j (bd - ae) / (d^2+e^2) ▣ 복소수 클래스 ● Complexx 클래스 ▷ 복소수를 표현하는 클래스 ▷ 복소수의 사칙연산과 켤레복소수를 구하는 멤버함수를 갖고 있다. ▷ 실수부의 값이 a, 허수부의 값.. 2020. 8. 28. 이전 1 2 3 4 5 6 다음 반응형