목록C++ (29)
헤더파일
sizeof(vector) 32비트 - 디버깅 모드 일땐 16바이트, 디버깅을 위한 정보가 필요해서 - 릴리즈 일땐 12바이트64비트 - 디버깅 - 24비트 릴리즈 - 32비트 vector가 3개를 받기로 했다면 힙에 3개를 설정하고 메모리를 차지한다.앞뒤 공간은 내꺼가 아니기 때문에 10개를 다시 잡는다면 다이나믹하게 공간을 새로 잡아 이사가고 전에꺼를 지운다.벡터는 size, capacity, 힙가리키는 pointer로 구성. class Model{public:int size{0};char* data=nullptr;int id;public:Model() :id{++gid} { cout
min 함수는 템플릿 함수이다.min(1,3) 을 쓰면 디폴트로 작은 정수를 뽑아내서 1을 내보낸다.하지만 min(1,3, [](){ }) 람다로 다른 기준을 줄수도 있다. class Dog{public:Dog(int age) :m_age(age) {}int m_age = 0;}; cout other.m_age;}friend ostream& operator
c언어의 랜덤함수는 모든 숫자가 같은 확률로 나오고 16비트지만 c++의 랜덤엔진은 원하는 대로 어떤 부분이 더 많이 나올 수 있는지 정할 수 있고 32비트이다. 지역변수는 스택에 저장된다. 스택은 기본적으로 접시를 조금씩 쌓아서 바로바로 쓸려고 쓰는 것.스택의 용도는 현재 정보를 잠시 저장하는 용도로만 쓴다. 엄청 큰 자료는 전역변수로 잡아도 되지만 초기화한 전역변수는 실행파일 크기가 커진다. 변수의 자료를 하드디스크에 저장하기 때문이다. 실행파일은 실행중에 메모리에 올라오기때문에 매우 비효율적이다. 전역변수는 데이터 은닉에도 비효율적이지만 실행파일 커지는 문제도 있다. int n[10000000] -> 102kb int n[10000000]{333}; -> 47000kb 그래서 큰 자료는 동적할당으로..
빌드하면 비주얼 스튜디오 속에 c++ 컴파일러가 파일을 읽기 시작한다.#include "iostream";include는 헤더안에 파일을 모두 복사한다. templatevoid exchange(T a){T b = a;}쭉 가다가 템플릿 코드를 만나면 호출된 함수의 자료형으로 함수 코드를 찍어낸다. 정수형으로 불렀다면templatevoid exchange(int a){int b = a;}이런식으로 템플릿은 인간이 쓴 코드와 똑같아서 효율이 떨어지는 부분이 전혀 없다.컴파일러는 자료형을 유추할 수 있어서 자료형 명시를 생략해도 된다. 사용자 정의 클래스일 경우는 명시해야 한다. class Dog{public:Dog() {}Dog(const char* name, int age)// const는 전달된 인자를 ..
다형성 지료형이 다른데 같은 이름의 함수로 비슷한 행동을 한다. Dog d;Bird b; d.move();b.move(); virtual이라고 이름이 붙은 함수는 4바이트씩 메모리가 희생된다. 함수가 어디있는지 찾아가기 위함. virtual void move() = 0;반드시 구현하도록 강제. 구현안 하면 컴파일러 상에서 오류가 뜬다. 하위 클래스에서는 반드시 오버라이드 해야한다. #include class Animal { public: virtual void move() = 0; }; class Dog : public Animal { public: void move() { std::cout