본문 바로가기

Archived(CSE Programming)

(169)
Chap 13. 템플릿(Template) 1 Chap 13. 템플릿(Template) 1 13-1. 템플릿에 대한 이해와 함수 12int add(int, int);double add(double, double);cs 템플릿은 말 그대로, 틀을 의미한다. 우리가 더하기를 수행하는 함수를 만들 때, 자료형이 다른 경우 오버로딩으로 해결하려하여도 반환형 까지 다르면 완전히 다른 함수를 만들어야 한다. 이 때, 우리는 자료형에 독립적인 함수를 만들 수 있는데 (정확히는 함수의 틀을 만들 수 있다) 그것이 바로 템플릿이다. 1234template T add(T num1, T num2){ return num1+num2;}cs 다음과 같이, template을 선언해주고 자료형 매개변수로 T가 어떤 의미인지 명시해준다. 그리고 원하는 자료형 부분을 T로 치환해주..
Chap 12. String 클래스의 디자인 Chap 12. String 클래스의 디자인 본 챕터에서는 cpp 표준으로 제공하는 라이브러리의 string class를 String class로 커버하는 것으로 대체한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115#include #include using namespace std; class String{ // 멤버변수priv..
Chap 11. 연산자 오버로딩 2 Chap 11. 연산자 오버로딩 2 11-1 반드시 해야하는 대입 연산자의 오버로딩. 연산자 오버로딩에 대해서 Chap 10에서 살펴봤다.그 중에서 대입 연산자의 경우 operator= 에서 우리가 앞서 공부했던 복사 생성자와 같은 문제점을 지니고 있다.바로 얕은 복사의 문제점이다. default 대입 연산자의 경우 단순 멤버의 이동만 진행하여, 동적할당 된 같은 메모리 공간을 두 변수 이상이 가르키게 되는 문제점이 있다.추가적으로 대입 연산자의 경우, 복사 생성자와 달리 기존의 값들이 존재하는 변수에다가 변수를 할당하는 것으로 기존의 동적할당 되어 있는 메모리 공간도 비어주어야 한다. 12345678// 복사 생성자의 경우Point pos1(3,4);Point pos2 = pos1; // Point(c..
Chap 10. 연산자의 오버로딩 1 Chap 10. 연산자의 오버로딩 1 10-1.연산자 오버로딩의 이해와 유형 연산자 오버로딩이란 cpp 내에서 사용할 수 있는 연산자를 객체들 간에서도 사용할 수 있도록 하는 것이다.가령, Point pos1 = pos2 + pos3; 와 같은 형태로 객체 간의 덧셈에 대해서 연산을 규정할 수 있다. 방법은 다음과 같이 멤버함수, 전역함수 두 가지의 방법이 있고 operator연산자 함수를 오버로딩하여 사용하면 된다. 12345678910111213141516171819202122232425262728class Point{private: int xpos; int ypos;public: Point(int x, int y) :xpos(x),ypos(y){} // 멤버함수 연산자 오버로딩 Point opera..
Chap 9. 가상(Virtual)의 원리와 다중상속 Chap 9. 가상(Virtual)의 원리와 다중상속 9-1. 멤버함수와 가상함수의 동작원리 논리적으로는 객체 안에 멤버함수를 가지는 것이 타당하다.이는, C 스타일의 해당 함수 포인터를 통해 특정 함수의 주소 공간을 각 객체에서 가르키고 있는 형태와 유사하다고 할 수 있다.즉, 각 클래스의 내부에 함수 주소 공간을 가르키는 포인터 형이 있고 실제 함수의 공간을 따로 할당이 되어있는 것이다. 그리고 V-Table 이라고 하는, 가상함수 테이블(virtual table)을 통해 해당 클래스마다 호출할 수 있는 함수의 목록을 나열해둬서 우리가 가상함수를 통해 오버라이딩 하였을 경우, 상위 클래스의 동일 함수는 가려지고 하위 클래스의 동일 함수가 목록에 있어서 실제 객체에 따라 특정 함수가 호출되는 형태를 통..
Chap 8. 상속과 다형성 Chap 8. 상속과 다형성 8-1. 객체 포인터의 참조관계 객체 포인터 변수는 해당 자료형의 객체 뿐만 아니라 해당 객체를 직간접적으로 상속하는 모든 객체를 가르킬 수 있다.그렇지만 특정 포인터의 자료형에 따라 사용할 수 있는, 접근할 수 있는 범위는 제한된다. 123456789101112131415161718192021222324252627282930313233#include class Person{// 멤버변수private: int age;// 멤버함수public: Person(int a) : age(a){} void funct(){ std::cout
Chap 7. 상속(Inheritance)의 이해 Chap 7. 상속(Inheritance)의 이해 7-1. 상속에 들어가기에 앞서 상속의 문제 상황에 대한 예시 제시.상속은 재활용을 위한 것이 아닌, 구체화(IS-A) 관계를 표현하기에 적절한 수단이다. 우리가 회사의 직원 봉급 관리 프로그램을 작성한다고 하였을 때,직원의 데이터를 저장하는 Data 클래스와 이러한 Data 클래스들을 관리하는 Control 클래스를 작성하였을 때,새로운 직원 형태(정규직, 알바, 인센티브 직, 등등)가 등장하면 기존의 Control 클래스에 많은 수정이 요구된다.그렇지만 이 때 Super 클래스를 작성해두고 이를 관리하는 Control 클래스를 두고 Data 클래스들은 Super 클래스를 상속하는 Sub 클래스로 둔다면 손쉽게 해결이 가능하다. 7-2. 상속의 문법적인..
Chap 6. friend와 static 그리고 const Chap 6. friend와 static 그리고 const 6-1. Const 기존의 Const는 기본 자료형 변수들에 대해서 선언하여 상수화 하는 것이 일반적인 사용법이었다.그런데, cpp에서는 객체에도 마찬가지로 상수화 선언을 통해서 상수 객체화할 수 있다.이 때, 상수화된 객체는 초기화 이후에 객체 내부의 멤버 변수를 변경할 수 없고, 상수 선언된 멤버함수만 호출 가능하다. 추가로 다음과 같이 const 객체에서 접근가능할 때와 일반 객체에서 접근가능할 때를 오버로딩 처리도 가능하다. 12void func(void){}void func(void) const {} // const cs 6-2. friend 선언 friend 선언은 말 그대로 친구의 의미로, 특정 클래스에서 class, 함수, 전역 함..