목록languages/c++ (7)
Written by coh at home
클래스 공부하는 내용. #include class Dog { private: std::string mName; int age; public: //const를 붙여서 강건성을 높임. 객체의 상태는 메소드를 통해서만 수정되어야함 const std::string& getName() { return mName; } void setName(const std::string& name) { mName = name; } std::string& bark() { return mName + ": " + "멍멍"; } }; int main() { Dog dog1; dog1.setName("건강"); //std::cout
c++에서는 c에서 쓰던 문법들을 모두 지원합니다. 따라서 다음과 같은 형식으로도 사용이 가능합니다. char a[6]{"hello"}; char *a = "cheol5"; 그렇지만 c++은 객체지향언어이기 때문에 문자열을 처리하는 클래스타입을 지원합니다. std::string name{"cheolho"}; name 변수는 이제 원래 c에서의 배열처럼 변경가능합니다. 단 전통적인 c에서는 문자열의 끝을 '\n'로 지정해주었는데 std::string에서는 null character를 이용하면 안 됩니다. 이제부터 널문자는 더 이상 문자열의 끝을 나타내는 것이 아니기 때문입니다. 문자열 갯수를 파악하기 위해서 메소드로 .size or .length를 지원합니다. #include using namespace ..
배열의 용량은 컴파일 시간에 결정됩니다. 음.. c도 마찬가지인데 하여튼 그래서 배열 size를 변수로 설정하는 것이 허용이 안 되었었죠. 그래서 동적메모리 할당으로 이를 해결했습니다. 기억 나나요? int* abc{new int[20]} //동적배열선언 int n[5]{}; //모두 0으로 초기화 c++11부터 이렇게 하는 겁니다. in place로 짜라고 하는데 흠.. 걍 우선 추가공간을 확보해서 만드는 것을 생각해본다음 in place로 바꿔볼게요. void removeDuplicates(int list[], int size){ int* temp{new int[size]}; temp[0]=list[0]; int j=1; for(int i=1;i

c++의 변수 종류에 참조 변수라는 개념이 추가된다. 일반변수, 포인터변수, 참조 변수... 참조변수란 대체 무엇일까? 그냥 &를 이용해서 a의 또다른 이름을 만든다고 생각해도 된다. c를 출력해보면 10을 출력하게 되고 포인터변수처럼 asterisk를 이용하지 않아도 된다. 그래서 코드를 보면 상당히 직관적이고 간결하다. 참조변수는 그럼 메모리의 어디에 저장될까? 그건 user가 알 수 없다. 그래서 별도 실존하는 것이 아니라고 여겨진다. 음.. &c를 출력해보면 &a와 같이 나오게 되고 c가 참조하는 값은 immutable하다. 축소변환. narrowing conversion 음.. c++부터 변수 초기화 방식으로 {}를 사용하게 된다. 이 때 축소변환으로 초기화를 하게 되면 error 가 발생하게 ..
도대체 c++에서 왜 객체를 쓰는 걸까. cout과 cin을 왜 객체로 모델링 했을까. 그냥 printf scanf 쓰면 되는 거 아닌가. 버퍼입력을 사용하기 때문에 그렇다. 표준입력을 std::cin >> n cin은 버퍼가 비어있는지를 보게 되고 입력한 데이터를 모두 버퍼로 옮기게 된다. 우리가 입력에 10 20 30 40 50 엔터를 치게 되면 1 0 공백 2 0 공백 전부 차례로 들어가게 된다 n의 type이 정수이므로 cin은 10을 저장하게 될 것이고 나머지는 여전히 버퍼에 남아있게 된다. 그래서 우리가 이 경우 두 번째 정수 데이터를 받으려고 하면 우리가 입력을 하기 전에 버퍼에 들어가 있는 20을 받게 되고 white space에서 짤라준다. 나머지 30 40 50은 여전히 버퍼에 남아있다..