C++ Template. 1.C++ Template 벡터(vector) 는 쉽게 생각하면 가변 길이 배열로 사용자가 배열 처럼 사용하는데 크기를 마음대로 줄이고 늘일 수 있는 편리한 자료형이다. 스택(stack)의 경우 나중에 들어간 것이 먼저 나온다(LIFO - last in first out) 형태의 자료형으로 pop 과 push 를 통해서 여러가지 작업들을 처리할 수 있다. 하지만 한 가지 문제는 담으려고 하는 데이터 타입이 바뀔 때 마다 다른 벡터를 만들어주어야 한다는 점이 있다. 예를 들어서 아래의 Vector 클래스를 살펴본다. class Vector { string* data; int capacity; int length; public: // 생성자 Vector(int n = 1) : dat..
분류 전체보기
C++ Creating excel part 2. 1.C++ Cell class extension Cell 클래스에는 string 데이터만 저장할 수 있기 때문에 이를 상속 받는 클래스들을 만들어서 셀에 다양한 데이터들을 보관할 수 있게 할 것이다. class Cell { protected: int x, y; Table* table; public: virtual string stringify() = 0; virtual int to_numeric() = 0; Cell(int x, int y, Table* table); }; 일단 기존의 Cell 클래스에서 문자열 데이터를 보관했던 것과는 달리 항목을 빼버리고, 이를 상속 받는 클래스에서 데이터를 보관하도록 했다. 또한, stringify 함수와 to_nume..
C++ Creating excel part 1. 1.C++ Creating excel. 본격적으로 Excel 을 구현하기에 앞서서, 몇 가지 자료 구조를 만들 것이다. 자료구조는 컴퓨터에서 데이터를 저장하는 방식이라 할 수 있는데,그 구현에 따라서 장단점이 각각 있다. => 장점만을 가진 자료 구조는 없다. Excel 프로그램에서 사용할 자료구조는 크게 Vector 와 Stack. 참고로 이들은 수식을 분석하기 위해, 즉 ExprCell 객체의 to_numeric 함수 내에서 사용될 예정이다. 각 자료구조들은 다음과 같은 특징을 가지고 있다. 벡터 (Vector) : 수학의 그 벡터와는 살짝 다른 느낌인데, 배열의 크기를 맘대로 조절할 수 있는 가변길이 배열이라 보면 된다. 즉, 배열 처럼 [] 연산자로..
C++ I / O in C++ 1.C++ I / O library in c++ C++의 모든 입출력 클래스는 ios_base 를 부모 클래스로 하게 된다. ios_base 클래스는 많은 일은 하지 않고, 스트림의 입출력 형식 관련 데이터를 처리 한다. 예를 들어서 실수 형을 출력할 때 정밀도를 어떤 식으로 할 것인지에 대해, 혹은 정수형을 출력 시에 10진수로 할지 16진수로 할지 등을 이 클래스에서 처리 한다. 그 다음으로 ios 클래스가 있다. 이 클래스에서는 실제로 스트림 버퍼를 초기화 한다. 스트림 버퍼란, 데이터를 내보내거나 받아들이기 전에 임시로 저장하는 곳이라 볼 수 있다. 쉽게 설명하자면, 예를 들어서 하드디스크에서 파일을 하나 읽는다고 해보자. 만일 사용자가 1 바이트 씩 읽는 다고 했을..
C++ Virtual functions and inheritance. 1.C++ Visual destructor 사실 클래스의 상속을 사용함으로써 중요하게 처리해야 되는 부분이 있다. 바로, 소멸자를 가상함수로 만들어야 된다는 점이다.Child 객체를 만든 부분을 살펴본다. cout
C++ Virtual function. 1.C++ ls - a and has - a 일단 이야기를 진행하기 전에, 어떠한 경우에서 상속을 사용하는지 생각해본다. C++ 에서 상속을 도입한 이유는 단순히 똑같은 코드를 또 쓰는 것을 막기 위한 Ctrl + C, Ctrl + V 방지용으로 위한 것이 아니다. 실제 이유는 상속이라는 기능을 통해서 객체지향프로그래밍에서 추구하는 실제 객체의 추상화를 좀 더 효과적으로 할 수 있게 되었다.상속이란 것이 없던 C 언어에서는 어떠한 구조체 사이의 관계를 표현할 수 있는 방법이 없었다. 하지만 C++ 에서 상속이란 것을 도입함으로써, 클래스 사이에 관계를 표현할 수 있게 되었는데, 예를 들어서 Manager 가 Employee 를 상속한다.class Manager : ..
C++ Standard String & Inheritance. 1.C++ Standard string class C 스타일의 문자열은 여러가지 문제점들이 많기 때문에 (예를 들어 문자열의 길이를 한 번에 알 수 없고 마지막 NULL 문자까지 하나 하나 읽어야 된다.) 문자열을 처리할 수 있는 새로운 무언가가 계속 필요해야 했다. 예전에 만든 MyString 클래스도 문자열 처리를 꽤나 훌륭하게 하지만, 실제로 속도가 매우 중요한 환경에서 그대로 쓰기에는 부족한 점이 많다. 대신에 string 이라는 빠르고, 안전하고 사용하기 매우 간단한 문자열 클래스가 표준으로 채택이 된다.string은 매우 빠르고 안전함에도 사용방법은 간단하다. #include #include using namespace std; /..
C++ Various overloading part 2. 1.C++ style casting C에서는, 캐스팅은 크게 2 가지 방법으로 발생한다. 하나는 그냥 컴파일러에서 알아서 캐스팅 하는 암시적(implicit) 캐스팅과, 직접 ~!@#$하게 캐스팅 하라고 지정하는 명시적(explicit) 캐스팅이 있다. 암시적 캐스팅의 경우 int 와 double 변수와의 덧셈을 수행할 때, int 형 변수가 자동으로 double 변수로 캐스팅 되는 것과 같은 것을 말하고, 명시적 캐스팅의 경우 예를 들어 void * 타입의 주소를 특정 구조체 포인터 타입의 주소로 바꾼다던지 등의 캐스팅이 있다.명시적 캐스팅은 아래와 같다. ptr = (Something *)other_ptr; int_variable = (int)..