일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 평창동계올림픽
- 성화봉송주자
- BOJ 2098
- multiset
- 다음 API
- MST
- 영어회화 100일의 기적
- 생활코딩
- 성화봉송
- Segment Tree
- 비트마스크
- 인간이 그리는 무늬
- 이분탐색
- 삼성 코딩테스트
- 다이나믹 프로그래밍
- 외판원 순회
- 안드로이드 스튜디오
- 위상정렬
- 백트레킹
- 다음 지도 api
- boj
- upper_bound
- DP
- 언어의 온도
- yolo
- 그리디 알고리즘
- BFS
- lower_bound
- 창훈쓰다
- 캘리그라피
- Today
- Total
목록2018/12 (22)
Hoon222y
상속 : 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것을 의미한다. 상속을 하는 주체를 부모 클래스하고 하고, 상속을 받는 주체를 자식클래스 라고 한다. 이때 상속되지 않는것은 : 생성자, 소멸자 , 대입연산자 , 정적멤버, friend 함수이다. 상속을 하려면 class 클래스명 : public 클래스명 으로 사용한다. 그렇다면 상속에서 생성자와 소멸자는 어떻게 작동하는지 알아보자. 123456789101112131415161718#include using namespace std; //상속 관계에서 생성자와 소멸자의 호출 순서//자식 생성자-> 부모 생성자 -> 자식 생성자 -> 자식 소멸자 -> 부모 소멸자class Parent{public: Parent(){ cout
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768//rule of 3//1. 복사 생성자 2. 소멸자 3. 대입연산자//대입 연산자 오버로딩 #include using namespace std; class Person{ char *name; int age;public: Person() :name(0), age(0){} Person(const char * n, int a) : age(a){ name = new char[strlen(n) + 1]; strcpy(name, n); } //만약 클래스 내부에서 동적 할당된 자원이 있다면..
12345678910111213141516171819202122232425262728293031323334353637383940414243444546//첨자 연산자 오버로딩#include using namespace std; class IntArray{ int* buf; int size;public: IntArray(int sz = 10): size(sz){ buf = new int[size]; } int length() const{ return size; } //아래의 코드가 동작될 수 있도록 함수를 변경하라.(리턴 타입을 int에서 int&로 바꿈) //첨자 연산자를 반환할 때는 참조 타입을 반환해야 하는데 그 이우는 값의 대입(=) 때문이다. int& operator[](int idx){ //이 함..
연산자 오버로딩 : 클래스에 대한 연산자를 정의하여 t3 = t2+t1; 처럼 객체끼리 연산할 수 있도록 만드는 문법이다. 12345678910111213141516171819202122232425262728293031#include using namespace std;class Int32{ int v;public: Int32(int val = 0) : v(val){} void print() const{ cout
123456789101112131415161718192021222324252627282930#include using namespace std;//mutable : 상수 멤버 함수 안에서 값의 수정을 가능하게 하는 키워드struct Cache{ mutable char str[32]; mutable bool is_cached; Cache(bool cached = false) : is_cached(cached){}};class Point{public: int _x, _y; Cache* pCache; Point(int x, int y) : _x(x), _y(y), pCache(new Cache){}; ~Point(){ delete pCache; } //동적할당 했으니 소멸자로 해제해준다. const char*..
상수 멤버 함수 : 함수 내부에서 멤버 변수의 값을 수정할 수 없는 함수를 말한다. 멤버 변수를 읽기만 하고 변경하지 않는다면 const 지정자를 붙여 상수 함수로 선언하면 된다. const 지정자를 함수명 뒤에 붙인다. 사용방법 : 리턴타입 함수명 ([매개변수, ...]) const 1234567891011121314151617181920212223#include using namespace std;class Point{public: int _x, _y; Point(int x, int y) : _x(x), _y(y){}; void set_x(int x){ _x = x; } void print() const { //이 안에서 상태값이 변경되지 않는다는 보장을 해주기 위해서 함수 뒤에 const를 붙인다...
유일한 객체를 생성하는 법1. 사용자가 객체를 임의로 생성할 수 없도록 private 영역에 정의한다. 2. 유일한 객체를 반환하는 정적 인터페이스를 제공한다. 3. 복사를 금지하기 위해서 복사 생성자를 private 영역에 정의한다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412..
정적 멤버 함수 : 객체가 아닌 클래스와 연관되어 모든 객체에 공통적인 작업을 처리한다. 정적 멤버 함수는 객체에 의해 호출되는 것이 아니어서 호출 객체인 this는 전달되지 않는다. 그래서 정적 멤버 함수는 정적 멤버만 참조할 수 있으며, 일반 멤버(비 정적 멤버)는 엑세스 할 수 없다. 일반 멤버 함수 : 객체와 함께 호출되는 방식으로 반드시 객체가 있어야 사용 가능하다. 정적 멤버 함수: C언어의 함수와 동일하되 클래스 안에 있는 전역변수이다. 전역변수이므로 객체 호출 없이 사용 가능하다.1234567891011121314151617class Clazz{public: int var; //일반 멤버 변수 static int s_var; //정적 멤버 변수 // 일반 멤버 함수 : 객체와 함께 호출되는..
정적 멤버 변수 : 클래스 바깥에 선언되지만 클래스에 소속되며, 객체별로 할당되지 않고 모든 객체가 공유한다. 정적 멤버 변수는 객체와 논리적으로 연결되어 있지만 객체 내부에 포함되지 않으며, 클래스에 소속된다. (공유 멤버라고 이해하는것이 좀 더 직관적이다. )예를들어 count 변수를 전역변수로 두어서 객체가 생성될 때 마다 count를 증가시키면서 객체의 개수를 확인한다고 가정하자. 이러한 경우에는 객체의 개수를 세는데는 문제가 없지만, 캡슐화 위반, 은폐가 불가능 등의 이유로 위험하다. 따라서 클래스 안에 해당 변수를 넣어주어야 한다. 123456789101112131415161718192021222324#include using namespace std;//int cnt; //데이터 영역 cla..
this : 객체 자신을 가리키는 포인터 상수를 의미한다. this 의 경우 멤버 함수 내에서만 사용이 가능하다. this 인수는 함수를 호출한 객체의 포인터 이며 모든 문장 앞에 this->가 암시적으로 적용된다. this 를 사용하는 이유는 1. 변수가 해당 객체의 멤버임을 알리기 위함2. 멤버 함수를 연속적으로 호출하기 위한 2가지 이유가 있다. 123456789101112131415#include using namespace std;class Int32{public: int var; //밖에서 접근할 수 있도록 하기위함 void set(int var){ var = var; //여기에서 var = 0;로 끝나는것이다. 즉 가장 가까운 곳에 할당이 됨. //해결책은 멤버 데이터의 이름을 바꾸면 된다...