반응형

학부내용 예습/[ 2021 겨울 ] C++ 12

[ 13강 ] 상속

포함 vs 상속 포함 - A가 B를 가지고 있는 관계 ex) 자동차는 타이어를 가지고 있다. 상속 - A가 B인 관계 ex) 사과는 과일이다. 상속 기존 클래스에서 새로운 클래스 파생 코드 재사용 파생 클래스는 다른 클래스의 기본 클래스로 제공 형식 public - 부모클래스의 정의 그대로 받는다 protected - 부모클래스의 public멤버를 protected로 받는다 private - 부모클래스의 public, protected 멤버들을 private 로 받는다. class BClass : public AClass{} // BClass가 AClass를 public 상속받음 생성자 자식생성자 호출시 할아버지-> 부모-> 자식 순서로 호출 부모생성자도 지정해줘야함

[ 11강 ] 연결리스트 (Linked List)

연결리스트 (Linked List) - 데이터를 저장한 노트들을 포인터로 연결한 자료구조 - 동적인 자료구조 : 노트를 리스트에 추가하거나 제거함 - 생성, 탐색, 삽입, 삭제 가능 - 하나의 리스트의 각각의 노드는 연속된 공간이 아니라 힙 공간에 분산되어 위치된다. 장점 원소의 재배열이 쉽다 메모리의 낭비를 맞을 수 있다 (동적이기에) 단점 포인터를 위한 공간 소비 동적 메모리의 관리가 필요하다 리스트 중간의 원소로 직접 접근 불가 (순차접근 가능) 종류 단순 연결 리스트 이중 연결 리스트 환형 리스트 이중 환형 리스트 단순 연결 리스트 노드들을 일렬로 연결한 것 각 노트는 자료값과 다음 노드에 대한 포인터로 이루어짐 이전 노드를 바로 접근할 수 없다. CLinkedList::CLinkesList(){..

[ C++ ] 10강. 깊은 복사, mutable, friend, static 멤버변수/함수

깊은복사 얕은 복사를 하면 주소값도 옮겨지기 때문에 소멸과정에서 오류가 난다 이에 내용은 같고 메모리는 다르게 만들어 줄 수 있도록 복사 생성자를 수정해줘야한다 //깊은 복사, 복사생성자 수정 예시 ArrayData::ArrayData(const ArrayData& copy) // 자기 자신이 인자로 들어올 때 : capacity(copy.capacity), used(copy.used) // 들어온거랑 똑같이 멤버변수 세팅 { data = new double[capacity]; // 동적할당은 새로운 매모리에 for (int i = 0; i < used; i++) // 내용은 모두 똑같이 복사 data[i] = copy.data[i]; } const 추가적인 내용 - const 객체 생성가능, const..

[ C++ ] 9강. 실습, 얕은 복사

실습하면서 알게된 점 1. 원본 데이터를 수정하고싶으면 &로 리턴해주면 된다 2. this는 클래스의 포인터 타입이다. 3. 포인터 타입은 -> 를 사용해야한다. 얕은 복사 Simple sum2(sim1) - 복사생성자를 생성하지 않아도 저절로 생성된 - 내용만 복사됨 문제점 - 동적할당 된 내용을 복사한다면, 주소값도 값이 복사되기 때문에 소멸될 때 런타임 오류가 일어남. -> 깊은 복사로 해결 가능 //lec9_Salesman.h #pragma once #include using namespace std; class Salesman { private: string name; double sales; public: Salesman(); ~Salesman(); Salesman(string name, do..

[ 8강 ] 클래스 (const 멤버함수, 생성자, 소멸자)

const 멤버함수 int GetX() const; // const 멤버함수 선언 - 클래스 내에서만 선언 가능 - 동일 클래스에 선언 된 멤버변수 값 변경 불가능 - const 객체는 cont 함수만 호출 가능 생성자 생성자 : 객체가 생성될 때 자동으로 호출되는 함수 : 클래스와 이름은 동일하지만 return 값이 없다 (오버로딩 가능) : 생성자가 하나라도 있으면 디폴트 생성자 기능 사라짐 이니셜라이저 생성자에서만 사용가능 생성하고 대입하는데 아니라 인자있는 형태로 생성되게 한다 Rectangle::Rectangle(const int& x1, const int& y1, const int& x2, const int& y2) :upLeft(x1,x2),loRight(x2,y2) {} 멤버변수도 초기화 ..

[ C++ ] 7강. 클래스, 객체지향 프로그래밍

클래스 구조체 - 사용자 정의 데이터 타입 - 연관있는 데이터를 하나로 묶음 클래스 = 구조체 + 함수 클래스에 접근제어자를 붙이지 않으면 모두 private 이다 접근 제어자 public 어디서든 접근허용 protected 상속관계에 놓여 있을 때, 유도 클래스에서의 접근허용 private 클래스 내에서만 접근 허용 // 클래스 생성 예시 class Car{ private: char ID; int speed; public: void showState(); void Accel(); }; 주의해야할 점 - 클래스 멤버에 초기값 주지 않기 (객체에서 주기) Lamp클래스와 User클래스를 만들어거 유저가 램프를 컨트롤하는 프로그램 // 해더파일 #pragma once #include class Lamp { ..

[ C++ ] 6강. 동적할당

정적할당 - 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것 - 더 큰 입력이 들어오면 처리못하고 더 작은 입력이 들어오면 메모리 낭비 동적할당 - 실행 도중에 동적으로 메모리를 할당 받는 것 (heap영역) - 사용이 끝나면 메모리 반납 int *pi; // 동적 메모리를 가르키는 포인터, 주소값 저장 pi = new int; // 동적 메모리 할당 , new는 주소 리턴 *pi = 100; // 동적메모리 사용 delete pi; // 동적 메모리 반납 int* arr = new int[3]; // 동적인 배열 생성 delete[] arr; // 배열 메모리 삭제 //2차원 배열 모두 동적으로 받기 int **p = new int*[ROW]; for (int i=0;i row >> ..

[ C++ ]4강. 다차원 배열 / 실습

1. 10x10 배열 만들어서 아이템 세개 심기 #include #include //랜덤함수 s사용 using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(nullptr); char map[10][10]; char item[3] = { 'a','b','c' }; char stand = 'O'; //배열 기본값 세팅 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { map[i][j] = 'O'; } } // 랜덤으로 a,b,c 삽입 for (int i = 0; i < 3; i++) { int a= rand() % 10; int b = rand() % 10; //중복 예외처리 if(s..

반응형