본문 바로가기

클래스6

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++] const 사용 시 주의점 오늘은 클래스 선언할 때 const를 써서 데이터를 보호하고자 하지만 썻다가 디버깅 지옥에 빠지는 경우를 소개하려고 합니다. 이전 포스트에서 만보기 예제를 다뤘는데, 그 예제를 이번에도 예로 들어서 설명하고자 합니다! 아래 포스트를 참고해주세요. 2020/08/27 - [Programming/C++] - [C++] 헤더파일(.h) 내용 중복 include 방지 방법 먼저, 만보기 프로그램 작성을 위한 Counter 클래스를 선언합니다. ● Counter.h #ifndef COUNTER_H_INCLUDED #define COUNTER_H_INCLUDED class Counter { //클래스 Counter의 선언 int value; //private 데이터멤버 public: //public 멤버함수 voi.. 2020. 8. 27.
C++ 언어 기초 (6) - 클래스와 객체 ▣ 객체지향 프로그래밍? ● 객체(object)란? ▷ 소프트웨어 시스템 안의 어떠한 대상을 표현한 것으로 다음의 역할을 수행한다. 정해진 처리를 수행한다. --> 행위, 메소드, 멤버함수 처리 과정에 따라 내부 상태가 변화할 수 있다. --> 속성, 데이터 멤버 다른 객체와 상호작용 할 수 있다. --> 메시지 전달(멤버함수 호출) ▷ 아래의 포스트에서 정의했던 원 객체를 예로 들면 다음과 같이 역할에 따라 분류할 수 있다. 2020/08/26 - [Programming/C++] - [초급] C++ 언어 기초 (3) - 구조체와 클래스 행위: init(), area(), display(), chkOverlap() 속성: center, radius ● 클래스(class)란? ▷ 객체의 설계도로 객체가 포.. 2020. 8. 27.
C++ 언어 기초 (3) - 구조체와 클래스 ▣ 구조체와 클래스 ● 구조체(struct)란? ▷ 여러 가지 자료형의 데이터 집합을 저장할 수 있는 새로운 자료형을 정의한 것 ▶ 구조체의 표현방식 예 struct C2dType { double x, y; } ▷ 구조체 활용 예제 - Circle.cpp #include #include using namespace std; const double PI = 3.141593; struct C2dType { //2차원 좌표 구조체 double x, y; }; struct CircleType { //원 구조체 C2dType center; //중심좌표 double radius; //반경 }; double circleArea(CircleType c) { return c.radius * c.radius * PI; }.. 2020. 8. 26.
반응형