목록C++ (25)
완숙의 블로그
Static Binding (정적 바인딩) #include #include #include using namespace std; class Base{ public: void f(){cout
Inherence 전체적인 구조 상속이 필요한 이유 상속은 매우 유용하다. 이전에 클래스를 다뤘던 글을 다시 기억해보자. What is Class? 우리가 클래스를 사용하는 이유는, 쉽게 말해, 어떤 물체를 정의해서 사용하는 것이 더 합리적이라는 판단이 들어서 이다. 함수만 가지고서 무언가를 만들기 보다는, 내가 물건을 정의하고 그 물건들을 실제로 만든뒤, 물건들로 다른 활동을 하는 것이 보다 쉽기 때문이다. 이전에 사용했던 사진을 다시 사용해보면, 간단하게 이렇게 정의할 수 있다. 물체를 정의하기 위해 만들어진 것이 클래스, 그 클래스를 기반으로 만들어질 대상이 객체, 실제로 만들어져 구체화 된 물체를 인스턴스라 부른다. 그럼, 상속의 개념은 왜 필요할까? 위의 클래스 예시에서 리모컨 설계도는 굉장히 ..
friend 두개의 클래스가 있을 때, 서로 만들어진 모든 멤버변수, 멤버함수를 공유하기 위해서 우리는 friend 라는 키워드를 사용할 수 있다. a 객체가 b 객체를 친구로 선언한다면 b객체는 a객체의 모든 변수와 함수값을 갖다가 사용할 수 있다. private 까지 사용 가능하다!!!! #include using namespace std; class Point{ private: int x; int y; public: Point(): x(0), y(0){} Point(int _x, int _y): x(_x), y(_y) {} void setXY(int _x, int _y){ this->x = _x; this->y = _y; } int getX() const { return this->x; } int ..
Pass by Reference 내가 클래스를 만들고, 그 클래스를 바탕으로 객체를 만들었다. 이때, 이 클래스에 연결되어 있는, 함수를 메서드라 했다. 그렇다면 이 만들어진 객체를 클래스 밖의 함수에서 input으로 받는다면 어떻게 해야할까? 보통 클래스를 함수의 input parameter로 받을 때, reference로 받는다. 그 이유는 클래스가 저장되어 있는 메모리공간의 절약을 위해서이다. const 외부 함수에서 내가 만든 객체를 부를 때, callbyreference로 값을 가져왔다면, 함수 내에서 값이 변경될 수 있다. 그렇기 때문에 함수를 만들 때, input 파라미터 앞에 const 를 달아준다. void print(const Point& pt){ // 함수내용 } 그런데, 이 함수내에..
What is Class? 우리는 클래스라는 개념을 왜 도입했을까? C++에서 함수가 태어나게 된 이유도 분리해서 관리하기 위함이었다. 그런데 함수로 계속해서 나눠서 하는데 한계가 찾아온 것! 함수에 들어가는 입출 파라미터가 특정 데이터 타입에 연관되어 필요하다는 사실을 알아냈다. 실제로 우리가 어떤 물건을 생각해 보면, 해당 물건(객체)는 물건의 용도에 따라 할 수 있는 행동(method)가 정해져 있다. 따라서 우리는 어떤 객체인지를 밝히고, 그 객체가 할 수 있는 함수를 정의해 놓는 것이 보다 실제적인 접근이다. 이 때 클래스 의 개념은 신이 무언가를 만들때 어떻게 만들지 생각해놓은 설계도 라 생각하면 된다. Class 생성 방법 Member data 실제 세상에 비유하면 물체를 만드는 행위에 해당..
What is Array? 직접적으로 값을 순차적으로 매핑한다. C언어에서 오래된 기술이고, 객체가 아니다. 처음에 배열의 크기를 지정하고 선언하는 정적 배열(static Array)이 있고, 배열의 크기를 유동적으로 조절할 수 있는 동적 배열(Dynamic Array)이 있다. 배열도 함수 포인터와 마찬가지로, 특정 배열을 내가 선언하게 되면 배열의 이름으로 선언해준 변수는 포인터 이다. 정적배열 (Static Array) 메모리 공간에서 배열 원소의 배치 #include using namespace std; int main(){ int ary[3] = {1, 2, 3}; cout
What is pointer 포인터는 먼저 자료형으로 선언할 수 있다. 각각의 자료형에 대해 * 를 달게 되면 선언할 수 있으며. 이 의미를 말로 파악하는 것이 중요한데, int* p 와 같은 경우, 특정 자료형이 int인 변수의 주소를 받을 수 있는 포인터 변수 p를 생성해라 로 생각 할 수 있다. char* c 와 같은 경우, 특정 자료형이 char인 변수의 주소를 받을 수 있는 포인터 변수 c를 생성해라 로 판단하면 된다. 그렇다면 어떤 식으로 메모리 공간에 할당이 될까? #include using namespace std; int main(){ int x; x = 4; int* p; p = &x; cout
String library method #include #include using namespace std; int main(){ string word = "good"; word.length();// 길이 리턴 word.empty();// 빈 문자열인지 1, 0값 리턴 word.clear();// 문자열 삭제 word += "-bye";// 더하기 가능 word[0];// h word[word.length() - 1];// 마지막 단어 i word.find("a"); // 해당 문자열이 없으면 string::npos 리턴 return 0; } substr string word = "good-bye"; word.substr(2, 5); rand() rand()는 난수를 발생시키는 함수이다. 하지만 사실 자..