C++ 11일차
·
C++
static은 범위의 제한을 받는 전역 변수다 범위??? 1. 파일 속 2. 네임스페이스 속 3. 클래스 속 4. 함수 속 extern키워드 다른 파일의 전역변수에 접근을 가능하게 해줌 하지만 static을 사용하면 extern으로 접근이 불가능 static을 이용한 정적 멤버 변수는 클래스당 하나의 copy만 존재(똑같은 클래스를 여러개로 생성해도 같은걸 공유) 개체 메모리 레이아웃의 일부X 클래스 메모리 레이아웃에 포함 exe파일 안에 필요한 메모리 잡혀있음(미리 만들어둠)->전역변수처럼 함수안에 정적변수넣기X->클래스안에 넣기 전역변수 대신 정적 멤버변수 사용->범위제한이 필요 C스타일의 정적 변수는 사용할 이유가 없다 (가끔 사용하는 사람이 있다) 정적 멤버 함수는 논리적 범위에 제한 된 전역 함..
C++ 10일차
·
C++
암시적(implicit) 캐스팅 형 변환이 허용되지만 프로그래머가 명시적 형 변환 안 할 경우 ex) int number1 = 3; long number2 = number1; // 암시적 캐스팅 명시적(explicit) 캐스팅 프로그래머가 형 변환을 위해 코드를 작성 C++캐스팅 1.static_cast 2.const_cast 3.dynamic_cast (C++98, 모던C++에서 도입) 4.reinterpret_cast C스타일 캐스팅과 C++스타일의 차이 C스타일은 C++ 스타일 4개 중 하나를 한다 = 명확하게 구분X ->명백한 실수를 컴파일러가 캐치 불가능 =C++캐스팅이 해결 C스타일은?? int number2 = (int)number1; static_cast (값) 값을 유지하려고한다. 3.x..
C++ 9일차
·
C++
다중 상속에서 상속(앞에있는것)순으로 생성자 호출 C++에서는 super 사용이 불가능 ->다중 상속이 가능하기 때문에 다중 상속한 경우 super가 가리키는 대상을 모른다 ->부모의 이름으로 작성해야한다. 상속한 두 클래스에 같은 이름의 함수가 있을 시, 사용하려는 함수를 가진 부모 클래스를 특정해야함 myTa->Student::Display(); 가상 베이스 클래스 b가 a를 상속하고 c가 a를 상속했는데 d가 b와 c를 상속한경우??? a는 2개가 존재->virtual키워드를 이용하여 해결... (이렇게 해야할까?? ㄴㄴ) 다중상속은 최대한 사용하지말고 인터페이스를 사용하자 순수(pure) 가상함수 virtual void Speak() = 0; 처럼 구현이 안되어있는 멤버 함수(구현체가 없는 멤버 ..
C++ 8일차
·
C++
생성자 => 부모생성자 호출->자식생성자 호출 소멸자 => 자식소멸자 호출->부모소멸자 호출 부모생성자 호출을 따로 안하면 1.부모 생성자에 매개변수가 필요없는경우 - 암시적 호출로 사용 2.부모 생성자에 매개변수가 들어가야하는경우 - 컴파일 에러 다형성(Polymorphism) - 여러 모습으로 변한다 정적 바인딩 - 무늬따라 가는것 (C++) Cat* yourCat = new Cat(5,"Mocha"); - Cat의 멤버함수 따라감 Animal* yourCat = new Cat(5,"Mocha"); - Animal의 멤버함수 따라감 위의 방법이 아닌 JAVA형식으로 하고싶다면?? 다형성의 핵심 - 가상(virtual) 함수 속도 정적(비 가상함수)>동적(가상함수) (실행중 어떤 함수 호출할지 정하기떄..
C++ 7일차
·
C++
const를 쓰는 이유?? 멤버 변수 값의 변경을 방지 최대한 많은 곳에 const를 쓰면 안정성이 늘어남 const &를 사용하는 이유?? 불필요한 개체의 사본이 생기는 것을 방지 멤버 변수가 바뀌는 것 방지 const는 잘못 사용하면 에러가 나기 쉽다. 하지만 안정성을 위해 최대한 사용할 수 있게 숙달하는 것이 중요하다 연산자 오버로딩에는 const를 사용하지 않는다. 매개변수에 &(참조자)를 사용하면 무슨 차이가 벌어지는가?? Vector Vector::operator+(Vector rhs) Vector Vector::operator+(Vector& rhs) 위의 경우에는 operator+()영역에 Vector rhs가 생기고 값을 복사해서 영역을 잡은 후 연산한다. 아래의 경우는 operator+..
C++ 6일차
·
C++
복사 생성자 복사 생성자에는 얕은 복사와 깊은 복사가 있다. 기본적으로 복사하기위해서는 초기화 리스트에 값을 전달시켜서 복사를 한다. =>이때의 문제점은 포인터가 있는 경우에 같은 주소값을 공유한다는 점이다. 같은 주소값을 공유한다면?? 같은 힙 메모리의 데이터를 공유할 것이고 함수에서 나가며 소멸자가 데이터를 지운다. 그러면 같은 주소값이 가리키던 데이터는 사라지게 된다. 그러면 남아있는 주소값은 빈 데이터를 가리키는 형태가 되어버린다.(이것이 얕은 복사) 이 문제를 해결하기 위해 깊은 복사를 하는 것이다. 깊은 복사는 복사 생성자 내부에 주소값같은 것을 새로 생성해서 따로 구현을 하는 것이다. 이렇게하면 복사된 주소와 기존의 주소가 같은 공간을 가리키는 경우가 사라질 것이고 위의 문제는 해결될것이다...