iostream : c++ 기본 헤더파일std : cout, cin 등의 함수가 들어있는 namespacecout : 데이터 출력 함수endl : 개행문자<< 연산자 연속 사용 가능a에 데이터 입력, 별도의 포멧 지정 불필요연속적인 데이터 입력도 가능tap,
오버로딩 : 이름이 같은 함수를 정의할 수 있다.c에서 지원하지 않는 함수 오버로딩을 c++에서 지원한다.오버로딩을 할 수 있는 이유는 c++에서 함수를 호출할 때 2가지를 확인하기 때문이다.함수의 이름매개변수의 자료형과 수하지만 함수의 반환형이 다르다고 오버로딩이 안
c에서는 컴파일러가 컴파일하기 전 전처리기에서 처리해주는 매크로기능이 있다\`\`컴파일 전 코드에 있는 PI, SQUARE를 각각 3.14, ((x) \*(x))로 치환해주는 기능이다.장점 : 함수 호출시 스택할당이 없어지므로 성능 향상단점 : 복잡한 함수형식 선언 불
const int num = 10;num변수를 상수화 하여 num값을 변경하지 못함const int\* num = &val1;포인터 num에 들어갈 주소값은 바꿀수 있지만(num = &another;같이) \*num같이 num을 통한 값변경은 불가하다.int\* con
c에서는 원래 참과 거짓을 표현하기 위해 int형인 1과 0을 사용했다.c++에서는 참거짓을 표현하기 위해 기본자료형으로 bool를 추가했다.위와 같이 선언 및 키워드 true, false를 통해 할당이 가능하다.bool은 기본적으로 1byte를 차지하며 0과 1하고는
선언 방법 int num1; 라는 변수가 있을때 num1의 참조자는 &ref = num1;이라 선언하면 된다. int main() { 참조자란 선언 가능 범위
참조자를 통해서도 외부 변수에 접근할 수 있다.따라서 call by reference를 할 수 있는 방법은포인터(주소값)을 이용한 call by reference참조자를 이용한 call by reference함수 선언시 매개변수로 참조자를 선언 -> void Swap(
ref라는 참조형을 return하고 반환형이 int&으로 참조형이다.이 경우 int& num2 = ref;와 같고 num2는 참조자의 참조자가 돼 num2는 num1의 참조자가 된다.이 경우 num2에는 참조자가 가지고 있는 값만 전달됨으로 num1과 num2는 다른
ref1의 경우 const 변수의 값을 바꾸는걸 허용해주는 것이기에 에러가 난다.const 변수는 const 참조자만 선언할 수 있다.const 참조자는 참조자를 통한 값 변경을 허용하지 않는다.const int& ref = 30;30이라는 리터럴 상수로 참조자를 초기
문자열 저장이 가능한 배열 malloc 예시char \* str = (char\*)malloc(sizeof(char)\*len);위와 같이 선언하면 heap영역에 메모리를 동적할당 할 수 있다.c++에서는 new 키워드를 통해 동적할당을 더 쉽게 할 수 있다.\`cha
기본 c 헤더파일 include\`c++에서 include.h를 생략하고 앞에 c\`를 붙이면 c언어와 대응되는 c++헤더파일이 include된다.모든 표준함수들이 namespace std안에 선언되어있다.c언어에 없던 오버로딩이 추가되어있다.string 관련rando
struct StructTag { }; ;을 잊지 말자c 정의struct Car { ... };c 선언struct Car car1 = { ... };c++ 정의struct Car { ... };c++ 선언Car car1 = { ... };struct 키워드 없이도 구조
Clas 선언 class 키워드로 class를 선언한다 명시해준다. private: 밑의 변수나 함수는 class 안에서만 접근가능하다. public: 밑의 변수나 함수는 어디서든 접근가능하다. >struct과 class의 차이는 기본 접근제어 지시자가 struct
class = 데이터 + 기능데이터 : 멤버변수기능 : 멤버함수buyer->BuyApples(seller, 5);이 코드는 buyer객체가 "seller객체야, 사과 5개 살게" 라는 메세지를 seller객체에 보내는 거라고 본다.Message Passing : 객체지
class의 변수의 경우 외부에서 변수들에 접근할 수 있다면 잘못된 값이 저장이 될 가능성이 있다.따라서 private로 변수들을 선언하고 잘못된 값이 저장되지 않도록 안전한 형태로만 변수 접근을 허용하도록 해야한다.멤버변수 member1에 접근할 수 있는 방법은 Ge
캡슐화란 관련있는 모든 것을 클래스 안에 묶어두는 것이다.위와 같은 class 들이 있다면 ColdPatient가 약을 먹는다는 기능을 할려면위와 같이 함수호출을 해야 한다.여기서 문제점은TakeCap 함수들의 호출순서가 결과에 영향을 미친다면 오류의 가능성이 높아진
객체 생성과 동시에 멤버들의 초기화를 해준다.생성자는class이름과 똑같이 선언해야한다.반환형 X오버로딩 가능디폴트 값 설정가능생성자가 선언된 class로 객체를 생성할때와 같이 전역,지역변수로 선언할때와 동적할당에서 두가지 형태가 있다.case4를 주석처리한 이유는
..
int a = b;기본자료형에서의 대입연산은 간단하다. 오른쪽에 저장된 값을 왼쪽변수의 메모리에 그대로 복사하면 끝이다.Person per2 = per1;그러나 다음과 같은 사용자가 정의한 class의 대입연산의 경우 그 구조가 복잡하기 때문에 대입연산의 경우의 수가
다음과 같이 멤버변수에 동적할당으로 초기화를 한다고 가정한다면 소멸자에서 메모리 해제를 해줘애 메모리 릭이 발생하지 않는다.Person man2 = man1;그런데 여기서 디폴트 복사생성자로 위와 같은 코드를 작성한다면 비정상적인 결과가 나온다.디폴트 복사 생성자의 경
SimpleClass obj2 = obj1;void Method1(SimpleClass obj); <- 함수호출 시 복사 생성자 호출SimpleClass Method2(void) { SimpleClass ob; return ob;} <-리턴시 복사생성자 호출
const int NUM = 1;const 상수선언은 위와 같다 . 그 의미는 NUM변수의 값을 변경할 수 없고 1로 고정이다.const Person\* man = new Person();위와 같이 class형식의 변수를 const선언한다면 man이 지정하는 객체의 멤
전역변수의 static 선언 -> 선언된 파일 안에서만 접근가능함수 내 변수 static 선언 -> 한번만 초기화 되고 함수호출 끝나도 소멸 X멤버변수에 static선언을 해 클래스 변수로 만들기도 한다.static은 private, public 둘 다 선언가능하다.c
Sub : 상속받는 classBase : 상속한 class보통 Sub는 유도클래스 base는 기초클래스라고 한다.유도클래스는 기초클래스의 멤버 + 자기자신의 멤버 로 구성된다.유도클래스는 기초생성자의 멤버들도 초기화 할 의무가 있다."클래스의 멤버는 해당 클래스의 생성
public, private와 같은 접근제어 지시자클래스 안, 유도클래스 안에서의 접근만 허용private < protected < public class Derived : public Baseclass 선언시 기초클래스 옆에 접근제어 지시자가 붙는다.각각의
기초클래스의 포인터는 유도클래스 객체도 가리킬 수 있다.SoDerived객체이지만 SoBase 포인터로 가리키고 있기 때문에 SoDerived 멤버에 접근 불가하다.c++컴파일러는 포인터연산의 가능성 여부를, 포인터의 자료형을 기준으로 판단하지,실제 가리키는 객체의 자
함수 오버라이딩 시 문제점 객체 포인터로 객체를 가리킬 경우 포인터형에 해당하는 클래스의 멤버에만 접근가능하다. 따라서 위와 같이 실행시 Derived의 OverrideTest가 호출되는 것이 아닌 Base의 Override가 호출된다. 가상함수 virtual
가상 소멸자 만약 위와 같은 상황이 있다면 Base
클래스를 struct와 전역 함수로 풀어서 나타내면 다음과 같다.class도 똑같다. 같은 class형식의 여러 객체가 생성된다해도 멤버함수는 하나만 존재하고 이를 각각의 함수 포인터가 가리키는 형태가 된다.하지만 함수호출 시 각 객체으 정보가 전달되고(this) 이를
기본자료형간의 연산은 기본적으로 가능하지만 사용자가 정의한 class형식의 객체의 경우 연산자로 연산이 불가능하다.int num1 = 5; int num2 = 3; num1 + num2; -> 가능Simple obj1; Simple obj2; obj1 + obj2; -
Point&를 반환형으로 하는 이유는 ++(++obj1)과 같은 연산도 구현하기 위해서다.\++(++obj1) -> ++(obj1.operator++()) -> ++(obj1의 참조값) 순으로 연산된다.후위 증감 연산자의 경우 매개변수로 int를 하나 더 받는다.이를
선언과 동시에 초기화하는 경우\-> 복사 생성자 호출선언 후 객체 간 대입 연산\-> 대입 연산자 호출따로 정의하지 않아도 디폴트 대입연산자가 정의되어 있다.디폴트 대입 연산자의 경우 멤버 대 멤버 복사가 선언되어 있다.만약 다음과 같이 멤버변수가 선언되있다면대입연산자
배열 클래스 연산자 오버로딩을 통해 배열처럼 접근이 가능하다. 배열 클래스의 안전성 확보 >배열의 이름은 그 자체로 배열주소를 나타냄 저장된 데이터는 유일성을 보장해줘야함 위와 같은 이유로 배열 클래스의 복사관련 연산은 제한할 필요가 있다. 따라서 복사생성자, 대
new 연산자가 하는 일
( 포인터처럼 작동하지 않는 객체에 \*, -> 오버로딩은 적절치 않다. )(\*num) = 30;을 해석해보자(num.operator\*()) = 30;으로 변환되고 오버로딩된 함수가 호출된다.여기서 \*을 오버로딩할 때 반환형은 Number& 여야지 기존 \*연산에
( ) 연산 >1. 함수호출의 의미 형 변환의 의미 함수 호출에서 오버로딩 >1.객체를 함수처럼 사용할 수 있게 하는 오버로딩 객체의 맴버함수를 함수처럼 호출할 수 있게 하는 오버로딩
일반 함수템플릿화함수 템플릿은 템플릿이지 함수가 아니다.함수 호출시 함수 이름 뒤 < > 사이에 자료형을 넣어주면 된다.함수 템플릿을 기반으로 컴파일러가 만든 함수를 템플릿 함수라 한다.위의 템플릿을 기반으로을 호출하면와 같은 함수를 컴파일러가 생성 후 호출하게
클래스 템플릿과 템플릿 클래스 클래스의 템플릿화 일반 클래스 템플릿화 템플릿 클래스의 생성은 컴파일러에 의해 객체 생성시 일어난다. 템플릿 클래스의 객체 생성 시 자료형의 생략은 불가능하다. 선언과 정의의 분리 >클래스의 선언부 -> .h에 작성 클래스의 정의부