본문 바로가기

Study/C C++

[두들낙서] 상속에서의 형변환 업캐스팅 - 자식 클래스 포인터에서 부모 클래스 포인터로 형변환을 할 수 있다 - 묵시적으로 일어난다 주의 부모 클래스와 자식 클래스의 배열 크기를 고려해야 한다 형변환은 포인터를 사용하기 때문 ex) class Animal { public: float xpos = 1; float ypos = 2; }; class FlyingAnimal : public Animal { public: float zpos = 3; }; void printAnimals(Animal *a, int n) { for (int i = 0; i < n; i++) { cout 더보기
[두들낙서] 상속 상속 - 상위 클래스의 멤버 변수와 메소드를 하위 클래스에서 사용할 수 있도록 한다 주의 상위 클래스에서 하위 클래스의 멤버 변수와 메소드 사용이 불가능하다 ex) class Base { public: void bFunc() { } int bNum; }; class Derived : public Base { public: void dFunc() { } int dNum; }; 부모 클래스 - 자식 클래스로 상속을 해준 상위 클래스 자식 클래스 - 부모 클래스로 부터 멤버 변수와 메소드를 상속받은 하위 클래스 - 부모 클래스의 멤버 변수와 메소드에 추가 변수와 메소드를 더한다 주의 자식클래스가 부모클래스에 속해있다 부모클래스가 더 큰 범위의 클래스다 접근 제어 - 외부접근은 제한되지만 자식 클래스에서 접근은.. 더보기
[두들낙서] 묵시적 형변환 묵시적(암시적) 형변환 (implicit conversion) - 객체에 변환 생성자가 있다면, 형변환을 별도로 하지 않아도 입력이 된다 주의 어떠한 형태로 변환될지 애매한 상태일때는 명시적 형변환을 이용해준다 문법상 int, double 둘 다 가능할 때 ex) class Item { Item(int num) : num(num) { } } 형변환을 시켜줄 수 있는 생성자면 모두 변환 생성자다 Item i3 = 3; 3이 int값이지만, 형변환을 명시하지 않아도 상단의 생성자를 바탕으로 형변환을 시켜준다 명시적 형변환 (explicit conversion) - 객체에 변환 생성자가 있어도, 형변환을 별도로 할 수 있다 ex) class Item { Item(int num) : num(num) { } } .. 더보기
[두들낙서] 객체 복사 얕은 복사 - 주소값만 복사한다 주의 주소값만 복사하면 에러를 일으킬 수 있다 ex) int *a = new int(5); int *b = new int(3); a = b; delete a; 3을 삭제한다 delete b; 삭제된 부분을 삭제하기 때문에 에러가 난다 깊은 복사 - 값을 복사한다 - 얕은 복사로 인한 오류를 방지하기 위해 깊은 복사를 쓰는 것이 좋다 ex) int *a = new int(5); int *b = new int(3); *a = *b; delete a; 5가 있던 위치에 있는 3을 삭제한다 delete b; 기존 3을 삭제한다 복사 생성자 - 객체를 생성할 때 다른 객체를 복사한다 - 객체를 복사할 때, 멤버 포인터에서 얕은 복사가 일어나기 때문에 오버로딩해준다 ex) Strin.. 더보기
[두들낙서] 동적 할당 동적 할당 - 프로그램 실행 중에 변수를 메모리에 할당하는 것 - new와 delete를 이용해서 생성, 해제한다 new - 임의의 메모리 위치를 지정해 값을 넣고 주소값을 반환한다 ex) int *a = new int(5); int *arr = new int[100]; delete - 메모리 할당을 해제한다 ex) delete a; delete[] arr; 더보기
[두들낙서] 클래스와 객체 클래스 - 특정한 용도를 수행하기 위한 변수와 함수를 모아 둔 틀이다 자료형으로 볼 수 있다 - struct는 public 선언이, class는 private 선언이 기본이다 private - 클래스 내에서 private로 선언된 개체는 외부에서 접근이 불가능하다 클래스에서 선언되는 함수로만 접근 가능하다 ex) class TV { private: bool powerOn; int channel; int volume; } public - 클래스 내에서 public으로 선언된 개체는 외부에서 접근이 가능하다 private로 선언된 개체와 구분을 위해 사용한다 - private와 사용방법은 같다 객채 - 클래스라는 틀을 이용하여 찍어낸 개체(변수, 메모리상의 공간)이다 - 변수를 선언해 주듯이, 선언을 해주면.. 더보기
[두들낙서] C++ 스타일 문법 namespace - 사람의 성과 같이, 네임스페이스는 하위 변수, 함수들을 구분할수 있도록 해준다 - 사용 표현은 '(namespace)::(변수 또는 함수)'다 - 중첩 가능하다 - 네임스페이스 안에 있는 함수에 사용되는 변수는, 명시하지 않아도 네임스페이스의 변수를 사용한다 - 네임스페이스 선언과 정의를 떼어서 쓸 수 있다 처음 선언을 해주면 언제든지 정의를 별도로 해줄 수 있다 - using namespace를 사용하면, 명시하지 않아도 해당 네임스페이스로 인식한다 주의 네임스페이스 안에 있는 함수에 사용되는 변수가 다른 네임스페이스를 명시한다면, 명시된 변수를 사용한다 ex) namespace doodle { int n; void set() { n = 20; } } C언어와 다른점 1. 변수 선.. 더보기
[두들낙서] 상수 상수 - 변하지 않는 수 - 주로 대문자로 선언한다 const - 메모리에 저장되는 변수를 변경할 수 없도록 한다 ex) const float PI = 3.141592; macro - 메모리에 별도로 저장되지 않는 상수를 정의한다 - 코드를 정의할 수 있다 주의 상수명에 띄어쓰기는 불가능하다 주의 연산을 정의할 때 안전을 위해 매개변수 별로 괄호를 쳐줘야 안전하다 X*X에 A-1을 대입하면 A-1*A-1로 -1이 된다 ex) #define PI 3.141592 #define PRINT_HELLO printf("Hello"); enum - 원소들에 자동으로 번호를 붙여준다 - 상태를 사용하는 코드를 짤때 유용하다 주의 중간에 임의로 숫자를 붙여주면, 그 숫자부터 이어진다 0 1 5 6 ... ex) enu.. 더보기