본문 바로가기

예전/C, C++

(39)
[C/C++] 변수 (지역, 전역, static, extern) 지역 변수 생명 주기가 중괄호 시작부터 끝 까지이고, 사용도 그 중괄호 내에서만 가능하다. 전역 변수 중괄호 밖에 선언하며, 자동으로 0으로 초기화 된다.생명주기는 프로그램 시작부터 종료까지이다. 정적 변수 (Static 변수) 전역 변수와 같은 생명주기를 갖고, 마찬가지로 자동으로 0으로 초기화 된다.만약 임의로 초기화를 해줄 때에는 반드시 상수로 초기화 해야한다. 정적 변수는 중괄호 내에서 1번만 초기화 된다. 어떤 중괄호 내에서 정적 변수 선언시 그 중괄호 내에서만 쓸 수 있으며, 이런 정적 변수를 정적 지역 변수라고 한다. extern 은 외부 변수를 사용할 때, 붙이는 키워드이다. 만약 변수 앞에 static을 쓰면, extern을 써도 다른 곳에서 참조할 수 없다. 이러한 정적 변수를 정적 전..
[C/C++] malloc/free 와 new/delete malloc 과 new는 둘 다 메모리를 동적할당할 때 사용합니다. (코드) #include using namespace std; class cTest { public: cTest(void) { cout
[C/C++] 다형성 다형성 (Polymorphism) 다형성은상위 클래스로 선언된 레퍼런스를 이용해, 하위 클래스 객체가 참조할 수 있는 것으로 확장성이 좋은 코드를 만들기 위해 사용됩니다. 다형성은 프로그래밍시 여러 곳에서 볼 수 있는데, 그 중에 하나는 오버로딩입니다. 오버로딩은 이름은 같으나, 기능은 다른 것입니다.함수 오버로딩을 예로들면 하나의 함수 명으로 여러 작업을 동시에 할 수 있다는 특성이 다형성이라고 볼 수 있습니다. 다형성의 성질이 가장 잘 나타나는 곳은 상속입니다. 여기서도 업캐스팅(Up-Casting)이 다형성을 가장 나타내는데, 업캐스팅이란 상위 클래스로 하위 클래스를 캐스팅하는 다형성의 핵심적인 부분입니다. #include using namespace std; class cParent { publi..
구현 해볼 것 1. C의 atoi 함수 구현 2. C의 strlen 함수 구현 3. virtual void foo() = 0; 의 의미는? (클래스 선언 내에서) - 순 가상 함수 4. virtual 함수란 5. 다형성이란 6. virtual 함수를 사용하는 간단한 클래스 구현 7. bool isPowerofTwo(unsigned int num) : num이 2승수 인지를 판단하는 함수 구현 8. void ReverseWordByWord(char* str): str로 전달된 문장의 단어 순서를 뒤집는 함수를 구현할 것(예를 들어 Dog is Cute 가 들어가면 Cute is Dog 로 반환되어야 함) 9. void Swap(unsigned char a, unsigned char b): a와 b가 8bit 숫자일때, ..
[C++] 연산자 오버로딩 연산자 오버로딩 • 연산자란? 연산자란 연산을 하기 위해 필요한 것으로 C++에는 많은 연산자가 있다.연산자에는 기본적인 사칙연산 ( +, - , * , / , % ) 이나 대입연산( = ), 관계연산, 논리연산자가 있다.연산자 오버로딩을 통해 이 많은 연산자들을 오버로딩 할 수 있다. • 오버로딩이란? 오버로딩은 함수의 이름이 같고, 시그니쳐의 타입 혹은 개수에 따라 함수가 구분되는 것을 말한다. 여기서 리턴 값, 즉 반환형은 중요하지 않다. 그렇다면 연산자 오버로딩이란 무엇일까? • 연산자 오버로딩이란? 연산자 오버로딩이란 C++에서 연산자가 하는 일을 함수로 개인의 필요에 맞게 구현한 것이다. 예를 들어, 클래스의 성격에 따라 필요한 연산 기능이 있다면 그에 맞게 동작하도록 기본 연산자의 기능을 재..
[C++] 생성자 소멸자 생성자 소멸자 생성자( Constructors )란 클래스 객체를 생성할 때 자동적으로 호출되는 함수고, 소멸자( Destructors )란 클래스 객체가 소멸될 때 자동으로 호출되는 함수이다. 생성자 소멸자에서 중요한 개념은 호출 시점, 하는 일, 생성자의 종류 등 여러가지가 있다. 특징 생성자는 클래스와 동일한 이름이고, 반환 값이 없다. 소멸자도 마찬가지로 반환 값이 없고 함수이름 앞에 '~' 표시가 있다. 하는 일 생성자는 객체를 생성할 때 자동적으로 호출된다. 고로 객체 생성시 클래스에서 필요한 일들을 해주면 된다.즉 객체가 제대로 동작할 수 있게 준비하는 일이다. 그 일에는 첫번째로 멤버 변수를 초기화 하는 일이 있다. cState라는 클래스를 만들어보자. #include "cState.h" ..
[C++] 템플릿 ( template ) - 템플릿의 특수화 템플릿의 특수화 특별한 자료형에 대해 다른 기능으로 처리를 하고자 할 때 사용한다. 예를 들어 다른 자료형은 일반적으로 쓰고, char* 형이 올때는 특별하게 하고싶을때 쓴다. template int Sizeof(T a) { return sizeof(a); } template int Sizeof(char* a) //char* 형으로 매개변수가 오면 해당 함수가 호출된다. { return strlen(a); } 만약 Sizeof 함수 호출시 char* 형이라면 char* 에 특수화된 함수가 출력된다.
[C++] 템플릿 ( Template ) - 함수 템플릿과 클래스 템플릿 템플릿 오버로딩을 활용하기 위한 것으로 기능은 결정되어 있으나 자료형이 정해지지 않은 것이다. 템플릿이란 말 그대로 무엇을 만들기위해 찍어내는 틀이다. 템플릿은 크게 함수 템플릿과 클래스 템플릿으로 나눌 수 있다.함수 템플릿은 간단히 말하면 함수를 찍어내는 틀을 말하고, 클래스 템플릿은 클래스를 찍어내는 틀을 말한다. 1-1. 함수 템플릿 위에서 말했듯이 함수를 만드는 도구이다.함수를 선언할 때 처리할 데이터의 자료형이 정해지지 않은 것으로 함수의 기능만 결정되어진 것이다. 컴파일시 사용한 데이터 타입으로 함수가 만들어진다. 그렇게 만들어 진 것이 템플릿 함수이다. 예를 보자. // 스왑 template void Swap(T &num1,T &num2) { T temp = num1; num1 = num2;..