Loading...
2020. 8. 28. 17:17

가변 길이 템플릿

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include template void print(T arg) { std::cout

2020. 8. 28. 14:14

클래스 (Class)와 구조체 (Struct)의 차이

구조체와 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 struct Point { int x, y; }; int main() { Point p = { 1,2 }; return 0; } cs 구조체는 구조체를 만들어준 =뒤, main()에서 p를 선언하고 구조체를 초기화해주면 된다. 여기서 struct 대신 class를 써주면 클래스가 된다. 그런데 클래스로 바꿔주면 컴파일 과정에서 오류가 발생한다. 클래스와 구조체 모두 데이터를 묶어주는 역할을 하는데 오류가 발생하는 이유는 무엇일까 그 이유는 구조체와 클래스의 기본 접근제어 지시자가 다르기 때문이다. 구조체의 경우 접근제어 지시가를 따로 선언하지 않으면 모든 변수와 함수가 public으로 선언되고 클래스의 경우 private로 선언된다. ..

함수 템플릿

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include template T max(T& a, T& b) { return a > b ? a : b; } int main() { int a = 1, b = 2; std::cout

템플릿 (Template)

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include #include // T를 템플릿 인자로 받는 템플릿 정의template class Vector { T* data; int capacity; int length; public: Vector(int n = 1): data(new T[n]), capacity(n), length(0){} void push_back(T s) { if (capacity

2020. 8. 20. 16:33

오버라이딩, 가상함수

오버라이드 class Base { std::string s; public : Base() : s("기반") { std::cout

String class

#include #include #include using namespace std; class MyString { char* string_content; // 문자열 데이터를 가리키는 포인터 int string_length; // 문자열 길이 int memory_capacity; // 현재 할당된 용량 public: MyString(char c); // 문자 하나로 생성 MyString(const char* str); // 문자열로 부터 생성 MyString(const MyString& str); // 복사 생성자 ~MyString(); // 소멸자 // 함수가 클래스의 멤버함수인 경우 const 키워드를 뒤에 삽입가능 // 이 경우 함수에 속해있는 객체의 멤버변수를 변경할 수 없다 int length..

explicit, mutable

암시적 형 변환 (implict type conversion) - 컴파일러가 자동으로 하나의 기본 자료형을 다른 자료형으로 변환해준다. - 한 기본 자료형이 예상되지만 다른 기본 자료형이 제공될 때마다 수행한다. - 변환을 수행하는 방법을 컴파일러에게 명시적으로 알려 주지 않는다. - 한 자료형의 값을 더 큰 자료형으로 승격할때 사용해도 좋다. - 사용자가 의도하지 않은 암시적 변환이 일어날 수 있다. - 자동 형 변환이라고 불린다. 명시적 형 변환(explicit type conversion) - 형 변환을 하기 위해 형 변환 연산자를 사용한다. - 컴파일러에서 생성자를 explicit로 선언한다면 다른 생성자를 이용한 암시적 변환을 수행하지 않도록 막을 수 있다. - 해당 생성자가 복사 생성자의 형태..

초기화 리스트 (Initializer list)

생성자 호출과 동시에 멤버 변수들을 초기화 해주는 것 (생성자 이름) : var1(arg1), var2(arg2) {} -> var = 클래스의 멤버 변수, arg = 멤버 변수들을 무엇으로 초기화할지 지칭 var, arg의 이름이 같아도 상관X ex) Marine::Marine(int coord_x, int coord_y) : coord_x(coord_x), coord_y(coord_y), hp(50), damage(5), is_dead(false) {} 초기화 리스트를 사용하면 생성과 초기화를 동시에 수행하는 반면 초기화 리스트를 사용하지 않는 경우 생성을 먼저 한 뒤 대입을 수행하게 된다. int a = 10; // 초기화 리스트를 사용한다면 int a; a = 10; // 초기화 리스트를 사용하지..