본문 바로가기

728x90
반응형

C++/C++ 문법

(29)
[C++] 상속 (Inheritance), protected 상속 (inheritance) C++은 상속을 명시할 때 별도의 키워드가 존재하지 않는다. 키워드 대신 상속 지정자를 사용하여 어떤 클래스를 상속받는지 명시해 주면 된다. 상속과 관련된 내용은 앞서 포스팅한적이 있기 때문에 이번에는 사용방법만 설명하겠다. 상속 관련 내용https://enchupin.tistory.com/127  class TestClass {public: int age; string name;};class Student : TestClass {private: int std_num;}; 위 코드에서처럼 : 다음에 소멸자는 자식클래스의 소멸자가 먼저 호출되고 그다음에 부모클래스의 소멸자가 호출된다. Java와 마찬가지로 다단계 상속도 가능하며 오버라이딩도 같은 원리로 가능하다. 오버라이딩 ..
[C++] 템플릿 매개변수, 비타입 템플릿 매개변수 (NonType Template Parameter) 템플릿 매개변수 템플릿을 사용할 때 template 와 같이 사용한다고 했었다. 이때 typename T 와 같이 정의되지 않은 자료형을 사용하기 위한 변수를 타입 매개변수 라고 한다.      비타입 템플릿 매개변수 타입 매개변수 자리에 그냥 변수가 올 수도 있는데 이것을 비타입 템플릿 매개변수라고 한다. 사용하는 방법은 템플릿 매개변수와 동일하다. 따라서 아래 코드처럼 사용할 수 있다. #include template class TestClass {private: int arr[SIZE];};int main(){ TestClass test1; return 0;}       템플릿 매개변수 활용 비타입 템플릿 매개변수와 타입 매개변수를 함께 사용하는 것도 가능하다. 이를 활용하여 아래 코드처럼 어떤 ..
[C++] 템플릿 (Template), 함수 템플릿, 클래스 템플릿, 템플릿 특수화 템플릿 (Template) 템플릿은 말 그대로 특정 기능을 구현하기 위한 코드의 틀을 만들어주는 것이다. 즉 일반화된 코드를 작성하여 함수나 클래스에서 다양한 데이터 타입에 대해 재사용할 수 있게 해 준다.       함수를 대상으로 하는 템플릿 함수 템플릿을 사용하여 함수의 구조는 미리 정의하지만 자료형은 정해지지 않은 상태로 두는 것이 가능하다. 예를 들어 아래 코드처럼 작성하였다고 하자. template T Add(T num1, T num2) { return num1 + num2;} 위와 같이 작성하면 자료형은 정의하지 않았지만 어떤 자료형이 오더라도 덧셈 연산을 처리할 수 있다.  위 코드에서 만든 템플릿 함수는 아래 코드처럼 사용이 가능하다. cout (5.5, 2) (1.2, 3.4)  템플릿..
[C++] std::array (array container) 배열을 선언하는 방법 C++에서 배열을 선언할 때 C 스타일 배열을 사용하는 방법과 C++ 표준 라이브러리의 std::array를 사용하는 방법이 있다. C 스타일로 배열을 선언하는 방법은 아래 코드와 같다. int arr[10];int[] arr = new arr[10];  C++ 표준 라이브러리를 사용하여 배열을 선언하는 방법은 아래 코드와 같다. #include std::array arr; 이때 std::array는 array 헤더파일에 정의되어 있기 때문에 #include 를 꼭 해줘야 한다. 초기화하는 방법은 C 스타일 배열과 동일하다.      다차원 배열 선언 std::array를 사용한 2차원 배열의 경우 아래 코드와 같이 선언이 가능하다. array, 10> arr = {0};      ..
[C++] bool 자료형 bool 자료형 C++에서는 bool 자료형을 사용할 수 있다. bool 자료형은 보통 true, false를 저장하여 사용한다. #include using namespace std;int main() { bool isRaining = true; bool isSunny = false; if (isRaining) cout    만약 true, false 이외에 정수나 실수 값이 들어오면 0은 false로 0 이외의 값은 true로 변환된다. #include using namespace std;int main() { bool b1 = 0; // 0은 false로 변환 bool b2 = -42; // 0이 아닌 모든 값은 true로 변환 bool ..
[C++] 단항 연산자 오버로딩 (전위, 후위 연산자 오버로딩) 단항 연산자 오버로딩 단항 연산자를 오버로딩할 때에는 피연산자가 2개 이상인 연산자의 오버로딩과 차이점이 존재한다. 단항 연산자의 경우는 아래 코드처럼 반환값을 자기 자신으로 해주어야 한다. class Pos {private: int x; int y;public: Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { } Pos& operator++() { x+=1; y+=1; return *this; }};   단항 연산자 오버로딩의 사용 단항 연산자를 오버로딩하여 사용하는 방법은 아래와 같다.  Pos pos1(10, 15); Pos pos2(5, 7); pos1.operator++(); ++pos2;    이때 아래와 같은 코드의 사용도 가능하다.  Pos pos1(1..
[C++] friend, friend 함수 friend friend 키워드는 private 멤버의 접근을 허용해 주는 선언이다.friend 키워드는 클래스 내에 어디 존재하든 상관이 없다. private 영역에 존재해도 되고 public 영역에 존재해도 상관없다는 의미이다. 따라서 아래 코드처럼 작성하는 것이 가능하다. class Men {private: int age; friend class Women;public: Men (int num = 0) : age(num) { }};위 코드처럼 Men class에서 Women class에 friend 선언을 해주면 Women class에서도 age에 접근하는 것이 가능하다. 따라서 아래 코드처럼 사용하는 것이 가능하다. class Women {private: char name[20];p..
[C++] 연산자 오버로딩을 활용한 객체의 대입 복사 생성자를 활용한 객체의 대입 아래 코드처럼 복사 생성자를 활용하여 깊은 복사를 구현할 수도 있다. class Bag {private: int* data; size_t used; size_t capacity;public: Bag(size_t capacity) { data = new int[capacity]; this->capacity = capacity; used = 0; } Bag(const Bag& source) // 복사 생성자를 활용한 깊은 복사 { data = new int[source.capacity]; capacity = source.capacity; used = source.used; copy(source.data, source.used); } void copy(const ..

728x90
반응형