티스토리 뷰
반응형
추가되는 사항
- C++에서 명시적으로 멤버 변수를 가려야할 경우 class를 활용한다.
- struct와 다르게 class는 기본 접근 지정자가 private이고 외부에서 접근을 허용할 경우 public으로 지정해야한다.
class Object { int pri; public: int pub; }; Object o; o.pri = 10; // Error o.pub = 10; // OK
- class 외부에서 멤버 변수 또는 함수에 접근을 막을 경우 private 기호를 활용한다.
class Object { private: int pri; void foo() {} public: int pub; void bar() {} }; Object o; o.pri = 10; // Error o.foo(); // Error o.pub = 10; // OK o.bar(); // OK
목표
- C++ 구조체로 구현된 vector를 C++ 클래스로 구현한다.
- 접근 지정자를 이용하여 외부 접근을 막아야 하는 경우를 구별한다.
디자인
- vector의 다음 멤버 변수는 private으로 정의한다.
- int* data
- int capacity
- int length
- vector의 다음 멤버 함수는 private으로 정의한다.
- int ensure_capacity(int to_add)
- void increase_capacity()
- vector의 다음 멤버 함수는 public으로 정의한다.
- void initialize()
- void finalize()
- void add(int element)
- int get(int index)
- int set(int index, int element)
- int remove(int index)
- void print()
구현
#include <iostream> #include <algorithm> constexpr int INITIAL_SIZE = 10; class vector { private: int* data; int capacity; int length; bool ensure_capacity(int to_add) const { return length + to_add < capacity; } void increase_capacity() { auto tmp = data; data = new int[capacity * 2]; std::copy(tmp, tmp + length, data); delete[] tmp; capacity *= 2; } public: void initialize() { data = new int[INITIAL_SIZE]; capacity = INITIAL_SIZE; length = 0; } void finalize() { delete[] data; } void add(int element) { if (!ensure_capacity(1)) increase_capacity(); *(data + length++) = element; } int get(int index) const { return *(data + index); } int set(int index, int element) { auto tmp = *(data + index); *(data + index) = element; return tmp; } int remove(int index) { auto tmp = *(data + index); auto tail_length = length - index - 1; auto tail = new int[tail_length]; std::copy(data + index + 1, data + length, tail); std::copy(tail, tail + tail_length, data + index); delete[] tail; length--; return tmp; } void print() const { std::cout << '{'; for (int i = 0; i < length; i++) std::cout << *(data + i) << ((i < length - 1) ? ", " : ""); std::cout << '}' << std::endl; } };
반응형
'C++ > C to C++' 카테고리의 다른 글
[C to C++] friend, 연산자 오버로딩 (0) | 2019.01.31 |
---|---|
[C to C++] 함수 오버로딩 (0) | 2019.01.31 |
[C to C++] 생성자, 소멸자, 복사 생성자 (0) | 2019.01.29 |
[C to C++] C++ 스타일에 맞춰 vector 작성하기 (0) | 2019.01.28 |
[C to C++] C 스타일로 vector를 작성해보자 (0) | 2019.01.28 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- vector
- 포인터
- C
- c++ 상속
- inline class
- cyanogenmod
- g2 korea
- nodeal
- LG
- C++
- 객체지향
- c++11
- rule_of_five
- c++ struct
- Kotlin
- dokdo-project
- rule_of_three
- f320s
- PipelineContext
- G2
- f320k
- C++ 업캐스팅
- dokdo 4.0.3
- linaro
- OOP
- dokdo project
- d802
- Java
- CM10.2
- CM11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함