클래스의 멤버 변수는 m\_ 키워드를 붙이자.함수내에 들어오는 변수들을 구분하자. 변경되지 않는 변수들은 const data & // const 레퍼런스 타입으로 지정하고, 명칭은 in\_ 키워드를 붙여서 입력으로만 들어오는 파라미터 라는 것을 나타내자.함수 내에 들어
: 인자가 원본자체를 복사받아서 사용된다. \-> 인자가 배열 형식 10개로 되어 있다고 생각해보자. 이렇게 되면 int형 10번의 복사가 진행된다. 굉장히 비효율적이다. : 인자가 포인터 형식이다. 원본의 주소값만 복사 받아서 사용된다. \-> 인자가 배열이더라도,
코드 없는 프로그래밍 강의를 공부하고 정리한 내용입니다. : LValue를 RValue로 변환하고, 그와 동시에 자원의 소유권을 다른 오브젝트에 넘길 수 있다.: 매개변수로는 a의 주소값, value값 원본 그 자체가 s이며,함수 내에서는 b에게 복사 대입이 발생한다.
//코드 없는 프로그래밍 강의를 공부 하고 정리한 내용입니다.: Cat는 선언을 한것이고, kitty, 와 navi는 메모리에 할당을 한것이다. 선언부인 Cat을 클래스, 메모리에 할당한 kitty와 navi는 오브젝트이다. 1) 추상화2) 캡슐화3) 상속4) 다형성
코드 없는 프로그래밍 강의를 공부하고 정리한 내용입니다. 멤버 함수는 객체를 할당할때 클래스의 멤버들과 함께 할당되는 것이 아니다. 컴파일 시에 단 한번만 메모리에 할당되어서, this로 접근시 객체들의 주소로 접근하는 것이다. 참고 : https://blog
코드 없는 프로그래밍 강의를 공부하고 정리한 내용입니다. 이것이 가능한 이유는 오브젝트와 연관이 되어있지 않기 때문이다. 클래스의 this라는 키워드는 오브젝트의 주소를 가리킨다.하지만 static 멤버 함수는 this와 바인딩이 되어 있지 않기 때문에 오브젝트를 생성
: 오브젝트 할당 시 생성자가 호출되고, 해당 스코프를 벗어나면 소멸자가 호출된다.: 포폴에 동적할당 해제를 new , delete 를 사용했는데 스마트 포인터로 변경하자.\-> 스마트 포인터로 변경하자.\-> 오브젝트의 크기가 크지 않다면 멤버오브젝트로 사용하자.:
코드없는 프로그래밍 강의를 보고 공부 및 정리한 내용입니다. 1) 생성자 2) 소멸자3) copy / move 생성자4) copy / move 할당자유저가 클래스 내의 멤버 변수로 포인터를 사용한다면 소멸자, copy /move 생성자 및 할당자를 관리해야 한다. \-
ddd
dd
코드 없는 프로그래밍 강좌를 공부하고 정리한 내용입니다."객체 = 객체" 일 경우에 복사 및 이동 대입 생성자가 호출된다. 갱신되는 객체가 원본? 기준? 이 되는 객체를 대입할 경우 copy 형식으로진행이 되는 함수.복사 대입생성자가 호출되기 위해서는 초기화된 2개의
코드 없는 프로그래밍의 강좌를 공부하고 정리한 내용입니다. : 함수명이 같고, 파라미터의 데이터형, 갯수가 다를때 name mangling을 통해서 컴파일러가 서로 다른 함수를 만든다는 개념이다. cpp reference의 예를 통해 기계어에서는 어떻게 맹글링?이 되는
: c++를 안전하게 동작하기 위한 키워드이다. 붙일수 있는 모든 곳에 붙이자. 1) 멤버 함수가 멤버 변수의 값을 변경하지 않는다면 함수명 뒤에 붙이자.: 의도자체가 변경이 아닌 출력이므로 유저가 함수명 뒤에다가 const를 붙인후, 의도치 않게? 여러가지 요인에 의
특징 1) RAII (Resource Acquisition is Initialization)그러니까, 자원 획득은 초기화라는 의미로,// 리소스의 라이프 사이클과 오브젝트의 라이프 사이클을 일치시킨다 라는 의미이다. 여기서의 리소스는 힙 메모리이다.2) 생명주기는 스코
c++11에서는 없어짐.. 단점 배열을 선언후, 해제할때, 배열의 시작 주소값만 해제한다. 복사 대입을 하게 되면, 우측값이 좌측값으로 그대로 이동되어서, nullptr값이 되어버리는 얕은 복사 문제가 있다. 이로 인해 c++11에서는 사용되지 않고, 새로운 스마트
: 소유권을 하나만 가지게 한다. \-> 포인터로 얕은 복사 후에 두개를 할당했으니, 두개를 해제하면 컴파일에러가 발생하는 것을 확인할 수 있다.: unique_ptr는 오브젝트를 2개의 포인터가 가리키는 상황을 허용치 않는다.복사는 불간능하지만 move는 가능하다.
하나의 객체를 여러개의 포인터가 가리키더라도, 문제가 되지 않는다.참조갯수를 이용해 RAII 규칙을 지킨다. 동일한 객체를 가리킬때마다 참조 갯수가 증가한다. 스코프 벗어나 참조갯수가 0이 될때 오브젝트의 해제가 일어난다.
: protected - 상속받은 자식들만 접근이 가능하다.참고 : https://thrillfighter.tistory.com/531: 상속받을 때 접근 지시자는 해당 자식클래스의 접근 지시자로 변경된다. public 일 경우 \-> 부모의 접근 지정자를 그
\-> derive 클래스의 소멸자가 호출되지 않은 것을 확인할 수 잇따. => 소멸자에 virtual이라는 키워드를 추가해야 한다. : virtual은 다음시간에 알아보자. : 부모 클래스에서는 자식에 보낼 함수를 virtual 키워드를 붙이고, 자식쪽은 상속받았다라
현재 내컴퓨너틑 64비트이다. 64비트에서 포인터의 크기는 8바이트임.: cat의 크기는 animal 클래스의 dAnimal 의 사이즈도 포함한 값이다. virtual 키워드 사용메모리 프로세스로 나타내면 이와 같다.\-> virtual 키워드 사용으로 가상함수테이블을
: 컴파일 시간에 함수 형태가 결정되는 정적바인딩이다.https://secretroute.tistory.com/entry/140819
: stl 컨테이너에서 널리 사용되어 지고 잇다. vector ints;vectordbs;vectorcat;
순수 가상함수란? : 함수 선언부에 0을 붙임으로써 만들수 있다. 순수 가상함수를 하나라도 가지고 있으면 해당 클래스는 추상 클래스가 된다. 추상클래스는 객체화할 수 없다. abstact 이므로 구체화할 수 없으며, 선언부를 정의하지 않았기 때문에 함수 호출이 불가능하
코드없는 프로그래밍 강의를 공부하고 정리한 내용입니다. 먼저 상속처리한 클래스의 생성자가 먼저 호출된다 포인터의 크기는 64비트에서는 8바이트, 32비트에서는 4바이트이다.=> 위의 상황에서 LIger 클래스의 크기는 Lion의 클래스 (8 + 8) + Tiger의 클
ddd
\-> 당연히 안된다. 왜냐하면 인자는 RValue이고, 매개변수는 레퍼런스 타입이기 때문에 해결하는 방법은 2가지가 있다.
class A와 class B간의 멤버를 참조해야 하는 경우가 있을 경우 각각을 include를 사용할 경우 컴파일러가 모든 헤더 파일을 훑고 넘어가야 하므로 속도가 저하되는 문제가 있다. 파일이 클수록 오래 걸린다!추가적으로 각 헤더 파일이 include 되어있는 상
: explicit을 한다고 해서 정적선언한 객체 선언이 불가능한 것은 아니다. explicit은 단지 암묵적으로 들어오는 값만 막아준다. 이런식으로 explicit 없애면 가능하다. 위의 예시를 통해 알 수 있는점. 정적객체를 매개변수 없이 선언하더라도,()나 {}을
어려움.. 공부해야함.. 상속을 했는데 부모 클래스 내부의 private 자료형도 크기 측정시 파생클래스에 포함된다! public으로 하든, private으로 하든 파생클래스의 크기에 포함되는 것을 확인할 수 있따.
오브젝트 슬라이싱 예시를 위해서 추상클래스가 아닌 그냥 부모 클래스로 만듬(추상클래스는 부모 클래스로 객체 생성이 불가능하므로)\-> animal을 객체로 선언하면 딱 Animal 멤버 크기만큼의 데이터가 할당되므로, Lion a로 선언한 데이터 중 파생클래스의 데이터
용도 특징 등
ㅇㅇ
ㅇㅇ
ㅇㅇㅇ
struct는 기본 접근제어 지시자가 public , 유저가 조작 불가능class는 기본접근 제어 지시자가 private, 유저가 3가지 사용 가능: c++은 c의 하위 호환성을 고려한 것이다. 애초에 구조체는 접근 지정자라는 개념이 없다.c++ 클래스의 캡슐화 및
유저가 명시적으로 정의하지 않더라도 컴파일러가 알아서 디폴트 생성자를 호출하기도 한다. 이를 암시적 생성자라고 한다. \-> 상속한 클래스를 객체화 했을때이다. 파생클래스에는 생성자가 없지만, 부모 클래스에는 생성자가 있기 때문에,부모 클래스의 생성자를 호출하기 위해서
: 부모 클래스를 참조형식으로 하고, 자식 클래스를 실형식으로 하고 동적할당을 한 후, 동적 할당 해제를 하게 되면, 부모 클래스의 소멸자만 해제 됩니다.왜냐하면 포인터의 자료형은 참조 형식 즉, 부모이므로 부모의 함수만 호출되는 것입니다. 오버라이딩 하는 함수에 vi
ㅇㅇㅇㅇ
참고자료 : 씹어먹는 c++, 코드없는 프로그래밍: 여러개의 포인터가 있는 메모리가 있고, 각각의 포인터들은 고정된 사이즈의 블록을 가리키도 있다. 떨어져 있는 블록은 연속적인 메모리를 가지고 있지 않다. 1.벡터에서 앞에서 삽입,삭제를 할 경우 시간복잡도는 O(n)이
unique_ptr은 복사가 불가능하므로 push_back은 못한다.shared_ptr은 복사가 가능하므로 push_back 가능하다. // 추가 공부해서 정리하자.
https://siminq.tistory.com/80lValue를 반환하는 것이다. 만약에 참조를 반환하는 get함수가 있고,일반 변수로 get 함수로 받으면 이것은 기존 객체의 복사 대입이 발생하는 것이다. Rvalue를 반환하는 것이다. 만약에 value를
동적 - dll의 경우는 실행파일과 함께 덧붙여야 실행파일이 실행 가능하다. 바이너리 자체에 라이브러리 내용이 포함되어 있지 않다.정적 라이브러리는 딸려서 관리할 필요가 없다. 바이너리 자체에 라이브러리 내용이 포함되어 있다.
복사되지 않을까? 에 대한 신경 쓰지 않아도 된다.컴파일러가 알아서 복제 생략을 발생한다. 전문가 c++ p. 145 아래의 코드를 실행하면, 복사가 발생하지 않는 다는 것을 확인할 수 있다. 업로드중..
240707 멤버 데이터 초기화 순서는 멤버 데이터 나열 순서다. 전문가 p.407 코드 Foo 객체가 멤버 데이터 첫번째이기 때문에 먼저 초기화되어야 하지만, mvalue 값이 쓰레기값으로 들어오기 때문에 쓰레기값이 출력되는 것을 확인할 수 있다. 궁금증 : 어