목록c++ (35)
Brise
// 8_생성자1 #include class Point { int x, y; public: // 특징 1. 클래스이름과 동일 // 2. 반환타입을 표기하지 않는다. // 3. 오버로딩 가능(2개 이상 만들수있다.) // 4. 객체를 생성하면 생성자가 호출된다. // 5. 사용자가 한개도 만들지 않으면 컴파일러가 // 인자 없는 생성자를 한개 만들어준다 - 디폴트 생성자 //Point() { x = 0; y = 0; std::cout
// 7_접근지정자 74page ~ // 멤버 데이타를 private 에 놓아서 // 외부의 잘못된 접근으로 객체의 상태가 불안해 지는 // 것을 막는다! // "캡슐화(encapsulation)", "정보 은닉" struct Bike { private: int gear; public: Bike(int n = 1) { if ( n > 0) gear = n; } void changeGear(int n) { if ( n > 0 ) gear = n; } }; int main() { // Bike b = { 5 }; // C 스타일의 초기화는 멤버 데이타가 // public 인 경우만 가능.. Bike b(5); //b.gear = -10; b.changeGear(-10); } C++에서는 정보 은닉 기능을 지..
// 6_STL #include #include #include #include int main() { // char s1[10] = "hello"; // char s2[10] = "hello"; // if (s1 == s2) {} // C++ string 클래스 - 문자열을 다루는 타입 std::string s1 = "hello"; std::string s2 = "hello"; if (s1 == s2) {} // ok // 동적 배열 std::vector v(10, 0); // 10개를 0으로 초기화 v[0] = 3; // 사용법은 배열과 동일 v.resize(15); // 크기 변경도 가능 for (auto& n : v) std::cout
절차적 프로그래밍과 OOP의 차이를 알아보기 위하여 Stack 예제를 다루어 보자. // 5_Stak1 - 60 page ~ #include // 스택을 만들어 봅시다. // 버전 1. C언어 // 단점 : 스택이 2개 이상 필요하다면.... int buff[10]; int idx = 0; void push(int a) { buff[idx++] = a;} int pop() { return buff[--idx]; } int main() { push(10); push(20); std::cout idx)++] = a; } int pop(Stack* s) { return s->buff[--(s->idx)]; } int main() { Stack s1; s1.idx = 0; Stack s2; s2.idx = 0;..
예를 들어 복소수를 더하는 프로그램에 대하여 생각해보자. OOP가 아닌 절차적 프로그래밍 방식의 경우 인자로 변수를 받아 값을 더하게 된다. // 4_OOP1.cpp 57 page #include void Add(int ar, int ai, int br, int bi, // in parameter int* sr, int* si) // out parameter { *sr = ar + br; *si = ai + bi; } int main() { // 복소수 2개를 더하는 함수를 생각해 봅시다. int ar = 1, ai = 1; // 1 + 1i int br = 2, bi = 2; // 2 + 2i int sr, si; Add(ar, ai, br, bi, &sr, &si); } 객체 지향(또는 기반) 프로그..
// 3_예제 #include // Swap를 만들어 봅시다. // 1. C 버전 /* void Swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } */ // 2. C++ 레퍼런스 사용 /* void Swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } */ // 3. 템플릿 도입 template void Swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } int main() { double x = 3.4, y = 2.1; //Swap(&x, &y); Swap(x, y); std::cout
// 2_메모리할당 - 52 page #include // malloc new // 함수 연산자 // void* 반환 정확한 타입으로 반환 // free 해지 delete 해지 // 생성자 호출안됨 생성자 호출 // 실패시 0반환 실패시 예외 발생 int main() { // C 스타일 int* p = (int*)malloc(sizeof(int) * 20); free(p); // C++ 스타일 int* p2 = new int; delete p2; int* p3 = new int[20]; // 배열로 할당 delete[] p3; // delete 가 아니라 delete[] 로 반환 //delete p3; // undefined(미정의 동작) 발생 } 객체 지향 언어인 C++에서는 malloc 뿐만 아니라 ..
C에서 C++로 넘어오게 되면서 큰 차이를 느끼는 문법 중의 하나가 바로 reference의 존재이다. reference의 경우 변수에 대한 별명을 부여하여 사용은 변수처럼, 동작은 포인터처럼 동작 가능한 C++에서 추가된 변수 타입이다. 물론 이를 통하여 편리함을 얻게 되었지만, 문법을 잘 아는 것이 아니라면 call by value인지 call by reference인지 헷갈리는 경우가 있다. // 1_레퍼런스.cpp 41 page #include // 핵심 1. 기존 변수(메모리)에 새로운 이름을 부여 하는 것 // 2. 레퍼런스 변수 선언시 반드시 초기값이 있어야 합니다. int main() { int n1 = 10; int n2 = n1; int* p1 = &n1; int& r1 = n1; //..