목록C++ (56)
Minwoo Dev.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OR3A6/btsIghTDIi0/ste23VAk8zsJs1tkiJL6dk/img.png)
static 키워드를 공부하다 보면 일반적인 전역 변수와 같은 게 아닌가 ? 싶은 의문점이 들 것이다.만약 같은 개념이라면, 굳이 "전역 변수" 라는 용어 외에 static 이라는 키워드가 존재하지 않았을 것이다. 일반적인 전역 변수#includeusing namespace std;int n = 0; // 전역 변수 선언void showN(){ n++; cout 위 코드는 전역 변수를 선언하여 사용하는 코드이다.결과는 위와 같다. static 전역 변수#includeusing namespace std;static int n = 0;void showN(){ n++; cout 그리고, 위 코드는 static 전역변수를 사용한 코드이다.결과는 일반적인 전역 변수를 사용한 코드와 동일하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/exXKfU/btsIioi0J76/54ovrYrbwD6xiA62Pl2GG1/img.png)
static"전역"의 의미를 갖는 static 키워드를 사용하여 선언한 변수는, 프로그램 시작부터 종료까지 존재하게 된다.#includeusing namespace std;void showN(){ static int n = 0; // n은 사라지지 않고 계속 존재 n++; cout n이 static으로 선언되었기 때문에 1 이 5번 출력되는 것이 아니고 1 2 3 4 5 순으로 출력되게 된다. 반대로, 함수 밖의 전역 범위에 있는 경우도 있다.이런 경우에는 static을 붙이지 않아도 전역 변수로써 작동한다. (정확히는 두 방식은 차이가 있다. 다음 게시글에서 다루겠다.)#includeusing namespace std;static int n = 0;void showN(){ n++..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bzYmGi/btsIhARZ3uG/dkVm5wSKqz0Eog7g7u6Mjk/img.png)
friendC++에서의 friend 선언은 해당 객체에 대해 접근을 허용할 때 사용한다.한마디로, 해당 객체의 private 영역에 대한 접근을 허용하게 해주는 키워드인 셈이다.자세한 건 예시를 통해 확인해보자. 우선, friend 선언은 가급적 사용을 지양해야 하며, 되도록 사용하지 않도록 프로그래밍 해야한다는 점을 기억하자 friend 선언이 사용되는 경우는 크게 두 가지가 존재한다. 1. 해당 객체가 다른 객체의 멤버에 대해 접근이 가능하도록 하고싶을 때#include#includeusing namespace std;class Girl;class Boy{private: int height; friend class Girl; // friend 선언public: Boy(int len)..
복사 생성자는 "="을 사용화여 연산을 수행하는 경우에 자동적으로 실행된다.Person p1("minwoo",23);Person p2 = p1;위와 같은 경우에, p2에 p1의 값을 그대로 "복사하여" 저장하게 된다.따라서 컴파일러는 위 코드를 아래처럼 변환하여 수행하게 된다. Person p1("minwoo",23);Person p2(p1); 기본 생성자의 모양과 굉장히 비슷하게 생기지 않았는가 ?다른 점이라면 객체에 들어가는 각 값이 아닌 또다른 하나의 객체가 통째로 들어간다는 점이다.우리는 위와 같은 모습의 생성자를 복사 생성자(Copy Constructor)라고 한다. 복사 생성자(Copy Constructor)class Person{private: char * name; int age;pu..
C++을 공부하다 보면 C언어에서부터 사용하던 malloc과 new가 헷갈릴 수 있다.new와 malloc의 차이점에 대해서 작성해보았다. mallocC언어에서 동적 할당을 사용할 때 사용하였다.malloc은 지정된 바이트 수 만큼 메모리를 할당한다.malloc은 초기화를 진행하지 않고 할당만을 수행한다.malloc은 "함수"이다.int* ptr = (int*)malloc(sizeof(int)); // 단일 정수형 변수 할당*ptr = 5;free(ptr); // 메모리 해제int* arr = (int*)malloc(10 * sizeof(int)); // 정수형 배열 할당free(arr); // ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cxJtWd/btsHDf79k2m/OD4CfZ7Vak7btk2yA6699k/img.png)
string문자열을 저장하기 위해서 char형 배열을 사용해야 했던 C언어와는 달리, C++에서는 문자열을 다룰 수 있는 string이 존재한다.변수형처럼 사용하지만, 실제로 string은 클래스(class)이다.#include using namespace std;int main(void){ string s = "안녕하세요."; cout 실행 결과 char* C언어에서 많이 사용되는 문자열 표현 방식.문자 하나를 저장할 수 있는 char을 여러 개 연결하여 배열처럼 사용한다.포인터 값이기 때문에 변수 안에는 문자열의 시작 주소가 담겨있다.#include using namespace std;int main(void){ char *s = "안녕하세요."; cout 실행 결과 v..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M3Ni2/btsHvrBY35e/cebuYbwWZfJLfOXCNfFs0K/img.png)
문제 1예제 StablePointPtrArray.cpp의 65, 66행을 다음과 같이 구성할 수 있도록 Point 클래스를 대상으로 연산자 오버로딩을 진행해보자for (int i = 0; i 물론, 실행결과에는 변함이 없도록 연산자를 오버로딩 해야한다. 정답#include #include using namespace std;class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) {} friend ostream &operatorxpos ypos = arrlen) { cout = arrlen) { cout 결과 문..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PI2Cz/btsHrObDECX/hEvnPr13ReN6j0xX7yke1k/img.png)
문제 1Chapter 07에서는 예제 HASComposite.cpp를 통해서 다음의 두 클래스를 정의하였다.(완전한 클래스의 정의는 예제를 참고하자.) class Gun{ ...}class Police { private: int handcuffs; Gun * pistol; public: .... } 이에 Police 클래스를 대상으로 깊은 복사가 이뤄지도록 대입 연산자와 복사 생성자를 동시에 정의하고 이의 확인을 위한 main 함수도 적절히 정의해보자. 정답#include using namespace std;class Gun{private: int bullet;public: Gun(int bnum) : bullet(bnum) {} void Shot() ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LgA3I/btsHlF8RtQK/SdRu5h7kalpFq88dlkNmC0/img.png)
예제 PointConsoleOutput.cpp 에서 정의한 Point 클래스를 대상으로 아래의 main 함수가 보이는대로 데이터의 입력이 가능하도록, 그리고 실행의 예에서 보이는 대로 출력이 이루어지도록 >> 연산자를 오버로딩 하자. PointConsoleOutput.cpp#include using namespace std;class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) {} void ShowPosition() const { cout [main 함수]int main(void){ Point pos1; cout > pos1; cout > p..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cygoqO/btsHnKAH8w0/FhAwYfOJVVZRREBgLKtawk/img.png)
문제 1 : 멤버함수의 형태로 오버로딩부호 연산자로서 - 는 단항 연산자이다. 이 연산자는 피연산자의 부호를 반전시킨 결과를 반환한다.예를 들어서 다음 문장이 실행되면,int num2 = -num1; num2에는 num1과 절대값은 같지만 부호가 다른 값이 저장된다. 물론 num1의 값에는 영향을 미치지 않는다. 이와 유사하게 Point 클래스를 대상으로 - 연산자를 오버로딩해보자.다음의 문장이 실행되면,Point pos2 = -pos1; pos2의 멤버변수는 pos1의 멤버변수 값과 다른 부호의 값으로 초기화되도록 오버로딩해보자. 정답 소스코드#include using namespace std;class Point{private: int xpos, ypos;public: Point(int ..