[C++] Inheritance
·
C++
상속수퍼클래스의 멤버들을 서브클래스도 가짐서브클래스는 수퍼클래스를 포함 = 서브클래스는 수퍼클래스의 확장서브클래스는 수퍼클래스의 변수와 함수를 마치 자기 것처럼 사용 가능서브클래스는 수퍼클래스의 특수화, 수퍼클래스는 서브클래스의 일반화is-a 관계 O, has-a 관계 X중복 줄임class Car {}class Sub : public Car {} 접근제어자접근 제어자클래스 A 서브클래스 subA 클래스 BprivateOXXprotectedOOXpublicOOO상속 유형에 따른 서브클래스의 멤버 함수에서 접근 가능성상속 받으면서 제한 범위를 바꿈최대 범위를 설정해서 그 범위보다 넓은 것은 모두 설정한 최대 범위로 바꿈ex) protected(최대 범위)로 상속 시, public(최대 범위보다 넓음)은 pr..
[C++] Operators
·
C++
연산자 중복여러가지 연산자들을 클래스 객체에 대해서도 적용하는 것연산자를 함수로 구현❗ 주의할 점새로운 연산자 만드는 것 허용 X::, *, ., ?: 연산자 중복 불가능내장된 int형이나 double형에 대한 연산자의 의미 변경 불가능연산자들의 우선 순위나 결합 법칙은 변경 X+, - 연산자를 오버로딩하였으면 일관성을 위해 +=, -= 연산자도 오버로딩하는 것이 좋음산술 연산자와 관계 연산자는 비멤버 함수로 정의 (참여하되 안바뀌는 것)할당 연산자는 멤버 함수로 정의 (참여해서 바뀌는 것) 프렌드 함수클래스의 내부 데이터에 접근할 수 있는 특수한 함수선언 방법프렌드 함수의 원형은 비록 클래스 안에 포함되지만 멤버 함수는 아님프렌드 함수의 본체는 외부에서 따로 정의프렌드 함수는 클래스 내부의 모든 멤버 ..
[C++] Namespace
·
C++
이름 공간: 식별자들이 존재하는 공간식별자들이 충돌하는 문제를 해결하기 위해 제안식별자 공간을 논리적으로 분할하고 식별자의 범위를 제한하는 것이 가능이름 공간 별로 변수 및 함수 이름 중복 가능 using문특정 변수나 함수using 이름공간::식별자;이름 공간 전체using namespace 이름공간; 전역 범위 접근전역 변수는 이름 공간이 없으므로 :: 연산자 사용전역 변수와 using namespace의 변수 이름이 같은 경우가 있기 때문
[C++] Objects
·
C++
객체 배열Car carArray[3] = { Car(10, "white"), Car(20, "red"), Car(0, "blue"),};객체 배열을 초기화하지 않으면 기본 생성자 호출객체 별로 생성자 호출 가능 객체정적 생성Car myCar;동적 생성Car *pCar = new Car();객체 포인터를 통한 멤버 접근pCar->speed = 100;pCar->display();this 포인터현재 코드를 실행하는 객체를 가리키는 포인터인스턴스 존재해야 사용 가능this는 도면에 있는 Class의 포인터this는 인스턴스의 주소객체에서 = 은 할당 연산 함수에서 객체의 전달객체가 함수의 매개 변수로 전달복사객체의 포인터가 함수의 매개 변수로 전달객체의 레퍼런스가 함수의 매개 변수로 전달함수의 실인자의 값이 ..
[C++] Constructors and Destructors
·
C++
Life Cycle객체 생성 → 생성자 → 객체 사용 → 소멸자 → 객체 파괴 생성자객체가 생설될 때 필드에게 초기값을 제공하고 필요한 초기화 절차를 실행하는 멤버 함수클래스 이름과 동일반환 값이 없음반드시 public중복 정의 가능Default constructorparameter가 없는 생성자클래스의 생성자가 아무것도 없으면 compiler가 자동으로 만듦생성자가 하나라도 있으면 default 생성자는 자동 생성 안 됨default parameter가 있는 생성자는 default constructor가 됨지역 변수는 초기화되지 않고 전역 변수는 0으로 초기화 소멸자클래스 이름에 ~가 붙음반환 값이 없음public 멤버 함수로 선언매개 변수를 받지 않음중복 정의 불가능동적 할당 받은 메모리를 반납하는 ..
[C++] Class
·
C++
클래스: 객체를 만드는 설계도객체를 바라보고 만듦.이전에 제공하지 않는 새로운 타입 절차 지향 프로그래밍함수라는 단위로 묶는다.데이터와 함수가 묶여있지 않다. 객체 지향 프로그래밍캡슐화데이터와 함수를 하나의 덩어리로 묶는다 Instance(인스턴스)클래스로부터 만들어지는 각각의 객체 객체상태와 동작을 가지고 있다.객체의 상태는 객체의 특징 값(속성)이다.객체의 동작 또는 행동은 객체가 취할 수 있는 동작 멤버 변수클래스 안에서 그러나 멤버 함수 외부에서 정의되는 변수객체의 속성을 나타낸다.인스턴스가 생설될 때 멤버 변수가 할당된다. 멤버 함수객체의 동작을 나타낸다.내부 정의, 외부 정의멤버 함수가 클래스 내부에 정의되면 자동적으로 인라인 함수가 된다.멤버 함수가 클래스 외부에 정의되면 일반적인 함수와 동..
[C++] Dynamic Allocation
·
C++
동적 메모리 할당: 실행 도중에 동적으로 메모리를 할당받는 것사용이 끝나면 시스템에 메모리 반납필요한 만큼만 할당받고 메모리를 효율적으로 사용c++은 new와 delete 키워드 사용 ↔ c는 malloc()/free() 메모리 누수(dangling pointer)같은 변수에 2개의 공간 할당됨 → 첫번째 할당 존재를 잊게 됨 → 해제할 수 없는 메모리어딘가에는 레퍼런스를 들고 있도록 만들어줘야 함. core filesegmentation fault가 발생했을 때 프로그램 수행 시 메모리를 그대로 file로 dump한 것지역 변수의 주소를 반환하면, 함수가 종료되면 사라지기 때문에 오류동적 할당받은 주소를 반환하는 것은 가능
[C++] Expression
·
C++
수식: 상수, 변수, 연산자의 조합상수 하나만 있어도 수식연산자와 피연산자로 나누어진다. 연산자피연산자수에 따른 분류단항 연산자: 피연산자의 수가 1개ex) ++x, - - y, *p이항 연산자: 피연산자의 수가 2개ex) x+y, x-y삼항 연산자: 피연산자의 수가 3개ex) x ? y : z산술 연산자덧셈, 곱셈, 나눗셈 등의 사칙 연산을 수행하는 연산자거듭 제곱 연산자는 없다.나눗셈 연산자정수형끼리의 나눗셈에서는 결과가 정수형으로 생성, 부동소수점형끼리는 부동소수점 값을 생성정수형끼리의 나눗셈에서는 소수점 이하는 버려진다.나머지 연산자첫번째 피연산자를 두번째 피연산자로 나누었을 경우의 나머지를 계산대입 연산자(==할당 연산자, 치환 연산자)왼쪽에 있는 변수에 오른쪽 수식의 값을 계산하여 대입왼쪽에는..