본문 바로가기

c++15

C++ - 상속 상속 상속 상속의 필요성 코드 중복 상속 계층 구조도 상속에서의 생성자, 소멸자 Python은 생성자 1개, C++은 여러개 Why? 오버로드 기능! 부모 클래스의 생성자를 지정하는 방법 : 멤버 초기화 리스트 #include #include using namespace std; class Shape { int x, y; public: Shape() { cout 2020. 10. 12.
C++ - 복사생성자와 정적멤버 복사생성자와 정적멤버 함수로 객체 전달하기 객체를 함수로 전달하기 함수 호출 시 객체를 매개변수로 전달하면 객체의 복사가 일어남 객체의 주소를 함수로 전달하기 함수 호출시 객체의 주소를 전달하면 객체의 복사가 일어나지 않음 참조자 매개변수 사용하기 효과는 포인터를 넘기는 것과 동일하나 포인터 보다 가독성이 좋아짐 함수가 객체를 반환 객체를 함수의 매개변수로 전달할 때와 같이 객체의 복사가 일어남 Pizza pizza = createPizza(); // 이런 함수를 팩토리 함수라고 한다. 복사 생성자가 사용되는 시점 함수의 매개변수로 객체를 전달할 때 객체를 대입할 때 복사 생성자 MyClass(const MyClass & other){ // 복사생성자의 매개변수타입은 지정되어있다. // 객체 초기화 //.. 2020. 10. 12.
C++ - 객체의 동적 생성 객체의 동적 생성 객체의 동적 생성 객체에 대해서도 동일한 원칙 적용 멤버 접근에 대한 표현이 다름 포인터_변수->멤버 Dog *pDog = new Dog; pDog->age = 10; : delete pDog; #include #include #include using namespace std; class Dog { public: int age; string name; Dog() { cout width; } }; int main(int argc, char const *argv[]) { Rectangle rect; cout 2020. 10. 12.
C++ - 동적 할당 메모리 동적 할당 메모리 프로그램에서의 메모리 스택(Stack) 지역 변수 할당 (정적할당) 시스템에 의해 관리 힙(Heap) 동적 메모리 할당 개발자에 의해 관리 new, delete new 동적으로 힙에 메모리를 할당 delete 동적으로 힙에 할당된 메모리를 회수 파괴자가 호출됨 동적 메모리를 회수 하지않으면 가비지(garbage) 증가 -- 메모리 누수 class T {}; T *p = new T; T *p = new T[N]; T *p = new T[N] { initializer1, ... , initializeerN}; int *p; p = new int[5]; int *p = new int[5] {0, 1, 2, 3, 4}; int *p = new int; : delete p; // 단일 데이터 삭.. 2020. 10. 12.
C++ - 포인터 포인터와 동적 객체 생성 포인터 포인터(pointer) 메모리의 주소값을 저장하는 변수 변수 선언시 타입 뒤에 *를 지정 int *p; // 정수를 가리키는 포인터 선언 주소 연산자 & 기존 변수의 주소 값을 획득하여 포인터 변수에 저장할 때 사용 int number = 10; int *p; // 정수를 가리키는 포인터 선언 p = &number; 간접 참조 연산자 * 포인터 변수에는 주소가 저장되어있음 그 주소에 저장되어 있는 데이터를 얻을 때 사용 #include using namespace std; int main() { int number = 0; double d = 20.2; int *p = &number; // p = &d; // 에러 double *pd = &d; cout 2020. 10. 12.
C++ - 객체 배열, 벡터 객체 배열 객체 배열 객체를 요소로 가지는 배열 클래스명 배열_이름[배열_크기]; Circle objArray[3]; objArray[0].calcArea(); #include using namespace std; class Circle { public: int x, y; int radius; Circle(): x(0), y(0), radius(0) {} Circle(int x, int y, int r) : x(x), y(y), radius(r) {} void print() { cout 2020. 10. 12.
C++ - 객체와 함수 객체와 함수 객체와 함수 객체와 함수의 관계 객체가 함수의 매개 변수로 전달되는 경우 객체의 참조자가 함수의 매개 변수로 전달되는 경우 함수가 객체를 반환하는 경우 객체가 함수의 매개변수로 전달되는 경우 - param.cpp 함수의 인수는 기본적으로 값에 의해 매개 변수로 전달 객체일 때도 마찬가지 --> 객체가 복사됨 #include using namespace std; class Pizza { public: int size; Pizza(int s) : size(s) {} }; void makeDouble(Pizza p) { p.size *= 2; } int main() { Pizza pizza(10); makeDouble(pizza); cout 2020. 10. 12.
C++ - 생성자와 접근 제한자 생성자와 접근 제한자 생성자(constructor) 생성자 객체가 인스턴스화 될 때 자동으로 호출되는 멤버 함수 리턴 타입이 없으며 클래스 이름과 동일 멤버 변수의 초기화가 주요 역할임 생성자를 정의하지 않으면 컴파일러에 의해 디폴트 생성자가 자동 추가됨 디폴트 생성자 매개변수가 없는 생성자 #include using namespace std; class Time { public: int hour; int minute; // 생성자 Time(int h, int m) { hour = h; minute = m; } void print() { cout 2020. 10. 12.
C++ - 클래스와 객체 클래스와 객체 객체의 구성요소 멤버 변수 객체의 상태를 저장하는 변수 멤버 함수(메서드) 객체 안에 정의된 함수 멤버 변수 접근에 자유로움 클래스와 객체(인스턴스) 클래스 객체의 형태를 정의하는 설계도 객체(인스턴스) 클래스의 형태를 취하는 실체 클래스 정의하기 접근 지정자 private 클래스 안에서만 접근(사용)할 수 있음 protected 클래스 안과 상속된 클래스에서 접근 가능 public 어디서나 접근이 가능 객체 생성 클래스 타입으로 변수를 선언하면 해당 객체(인스턴스)가 생성됨 객체 멤버 접근 . 연산자로 접근 정적 할당 : 선언과 동시에 Stack에 만들어진다. (stack frame of main) cf) Python에서는 상수랑 부울린만 정적 할당이었다. 객체의 사용 #include #.. 2020. 10. 11.
C++ - 문자열 문자열 string 클래스 문자열 데이터 저장 및 문자열 처리 함수(메서드) 제공 #include 을 먼저 지정 후 사용 #include #include using namespace std; int main(int argc, char const *argv[]) { string s1 = "Slow", s2 = "steady"; string s3 = "the race."; string s4; s4 = s1 + " and " + s2 + " wins " + s3; cout 2020. 10. 11.
C++ - 함수 함수 함수의 구조 함수의 호출 #include using namespace std; int max(int x, int y); // 함수 원형 int main(int argc, char const *argv[]) { int n; n = max(2, 3); cout 2020. 10. 11.
C++ - 배열 배열 배열(array) 같은 종류의 데이터들이 순차적으로 메모리에 저장되는 자료 구조 각각의 데이터(요소)들은 인덱스(번호)를 사용하여 독립적으로 접근 가능 대용량의 데이터를 동일한 이름으로 쉽게 저장하고 처리 가능 ) #include using namespace std; int main() { const int STUDENTS = 10; int scores[STUDENTS]; int sum = 0; int i, average; for (i = 0; i scores[i]; } for (i = 0; i < STUDENTS; i++) { sum += scores[i]; } average = sum / STUDENTS; cout 2020. 10. 11.