본문 바로가기

C++

warning C4996: strcpy'이(가) deprecated로 선언되었습니다 비쥬얼 스튜디오에서 자주 보던 waring중 하나, MS에서 지원을 중단할 함수이기 때문에 보안 강조된 strcpy_s 를 쓰라고 경고하는 내용이다. 하지만 표준함수라서 리눅스나 기타 다른 데서도 써야하기 때문에 순순히 strcpy_s를 쓰게되면 다른 플랫폼에서 error가 뜨게된다. 관련 waring이 너무 많이 떠서 짜증나서 없애고 싶다면.. #define _CRT_SECURE_NO_DEPRECATE 를 추가하던지 [프로젝트] → [속성] → [C/C++] → [전처리기]에서 '전처리기 정의' 항목에 _CRT_SECURE_NO_DEPRECATE 를 추가한다. 참고: http://mygeni.tistory.com/61 더보기
this포인터 참조 : http://blog.naver.com/playboy999?Redirect=Log&logNo=140103428983 this란 멤버함수를 호출한 객체의 주소를 저장하는 상수포인터이다. 객체가 생성될 때 멤버변수와 멤버함수가 모두 포함된다고 배워왔다. 하지만 이것은 이해를 돕기 위해 설명한 것이지 실제로는 그렇지 않다. 객체를 생성할 때에는 멤버변수들은 각각 할당되지만 멤버함수는 모든 객체가 공유하기 된다. 그러므로 클래스의 멤버함수 호출 시 어떤 객체가 멤버함수를 호출했는지 구별할 수 있도록 호출한 객체를 함수로 전달한다. 이때 함수는 이 객체를 받기 위한 포인터를 매개변수로 가지게 되는데 이를 this라 한다. 모든 클래스의 멤버함수는 this라는 상수포인터를 매개변수로 보이지 않게 가지고 있.. 더보기
레퍼런스 참조 : http://lejewk.tistory.com/82 레퍼런스는 c++에서 새로 도입된 개념이다. 레퍼런스란 변수명을 갖고있는 메모리주소에 또하나의 변수명을 지어주는것과 같다. 그렇다면 변수란 무엇일까? 그냥 변하는 값, 또는 상수,변수를 대입할수있는 이름 정도로 생각하는것은 안된다. 물론 그런 의미에서 변수일지몰라도 레퍼런스를 이해하려면 한가지 개념을 더 숙지해야만한다. 변수란 "메모리주소에 접근하기위해 사용자가 직접 정해준 이름" 라고 한가지 더 정의하겟다. 레퍼런스란말은 c언어에서 "Call-by-value" 를 배울때 가치 텨나온 개념중 "Call-by-Reference " 에서 레퍼런스의 말과 같다. 물론 완벽하게 같진 않지만 하는 행위는 비슷하다. Call-by-value : 함수 에서.. 더보기
키워드 const사용법 c언어 고칠 수 없는 값 고칠 수 있는 값 1) const 일반자료형 a; -> a가 상수화됬기 때문에 변경할 수가 없다. 2) const 포인터자료형 p=&a; -> 포인터 p가 가리키는 값(즉 *p)은 고칠 수가 없습니다. 하지만 p(포인터)와 a는 변수므로 고칠 수 있습니다. a는 어떤 값을 지칭하는 변수기 때문에 고칠수 있죠. p는 그 값을 지칭하는 변수의 주소인데 상수해주죠. 3) 포인터자료형 const p=&a; -> 포인터 p가 지니는 a의 주소 값(즉 p)은 고칠 수 없습니다. 하지만 *p는 고칠 수 있습니다. 4) const 포인터자료형 const p=&a; -> 포인터 p가 가리키는 값(즉 *p)와 포인터 p가 지니는 a의 주소 값(즉 p) 둘 다 고칠 수 없습니다. 5) 반환자료형 함.. 더보기
virtual 키워드 사용법 1.동적바인딩 기반클래스에 상속클래스를 대입했을때 기반클래스의 기반클래스의 함수가 아니라 기반클래스에서 상속클래스의 함수를 호출하도록 설정 2.순수가상함수 virtual int print() = 0; 기반클래스는 이 함수를 정의하지 않고 상속클래스에서 함수를 정의하도록 함 기반클래스는 이 함수땜에 생성을 할 수 없다 3. 가상(virtual) 기본 클래스가 필요한 이유는? (이것도 마찬가지로 복사)다중 상속의 경우 한 클래스를 두 번 상속받을 경우 멤버가 중복되어 메모리가 낭비되며 멤버의 모호함이 발생한다. 이 문제를 해결하려면 클래스를 두 번 상속받아도 한번만 상속하도록 하면 되는데 이것을 가능하게 해주는 클래스를 가상 기반 클래스라고 한다. 가상 기반 클래스로 지정된 클래스는 간접적으로 두 번 상속되.. 더보기
클래스 생성 Nu a(); 이런식으로 괄호안에 아무것도 안 넣으면 클래스가 생성이 안된다.!! 더보기
생성자 상속 Nu::Nu(int number):Number(number) 위에 처럼 기존의 클래스의 생성자를 사용하기 위해선 생성자의 괄호안의 변수이름과 같이 상속받은 클래스의 생성자에서 자료형과 변수이름을 맞춰야한다 더보기
생성자에서 반환 형식을 사용할 수 없습니다. 이건 클래스를 닫을때 마지막에 세미콜론(;)을 안쓰면 뜨는 에러... 더보기