전체 글

전체 글

    [C++] 오버로딩 (Overloading) - 2. 연산자

    [C++] 오버로딩 (Overloading) - 1.함수, 생성자 오버로딩 (overloading) 같은 이름의 메소드(method) 또는 생성자를 매개변수의 개수나 타입을 다르게 지정함으로써 2개 이상 정의하는 것 함수 오버로딩 함수를 호출할 때 매개변수를 보고 동작을 결 wn42.tistory.com "오버로딩 - 1. 함수, 생성자"에 이어 "연산자 오버로딩"을 배워보자. 연산자 오버로딩 C++에서는 사용자 정의 연산자를 사용할 수 있다. 기본 연산자를 여러 의미로 사용할 수 있다. (새로운 연산자를 정의하는 것은 불가능) 연산자 오버로딩 정의 연산자 오버로딩은 다음과 같이 정의한다. (반환타입) operator(연산자)(연산자가 받는 인자){ /*실행구문*/ return 반환값 } //exampl..

    [C++] mutable

    mutable const 함수(읽기만 가능)에서도 멤버 변수의 값을 변경할 수 있게 하는 키워드이다. const 함수가 무엇인지 모르겠다면 아래 참고 [C++] 클래스에서 static 이용하기 (+ const) Static 이용하기 Static 변수 static 변수는 한번 생성되면 객체가 종료될 때가 아닌, 프로그램이 종료될 때 소멸되므로 이를 생성된 객체의 개수를 세는데 활용할 수 있다. 클래스 내부에서 static 변 wn42.tistory.com mutable 키워드 이용하기 멤버 변수의 mutable 선언은 다음과 같다. mutable int x; const 함수로 mutable 멤버 변수 값 바꾸기 #include using namespace std; class Ex { private: mut..

    [C++] explicit

    explicit C++ 컴파일러가 암시적으로 형변환을 일으키지 않도록 하는 키워드 암시적 변환이란? 암시적 변환(implicit conversion)을 예제를 통해 알아보자 #include #include using namespace std; class MyString { char* strings; int strLen; public: void printstr(); // 문자열 생성 MyString(const char* str); // 복사 생성자 MyString(const MyString& str); ~MyString(); }; MyString::MyString(const char* str) { strLen = strlen(str); strings = new char[strLen]; for (int i ..

    [C++] this 포인터

    this 객체 자신을 가리키기 위해 사용하는 포인터 this는 왜 사용하는지 클래스에서 생성된 인스턴스는 독립된 메모리에 저장된 자신만의 멤버 변수를 갖지만, 멤버 함수는 모든 인스턴스가 공유한다. 다음과 같은 멤버 함수를 호출하는 경우를 생각해보자. Power를 비교하는 멤버 함수 Character& Character::whoWinner(Character& enemy) { if (enemy.power > power) { return enemy; } else { return ???? } } 서로 다른 캐릭터의 파워를 측정하여 승자를 반환하는 함수이다. enemy 레퍼런스를 인자로 받아서 파워를 비교하지만, 결론적으로 누구의 파워인지 알 수 없다. 따라서 반환해야 하는 객체 또한 어떤 것인지 알 수가 없다..

    [C++] 클래스에서 static 이용하기 (+ const)

    Static 이용하기 Static 변수 static 변수는 한번 생성되면 객체가 종료될 때가 아닌, 프로그램이 종료될 때 소멸되므로 이를 생성된 객체의 개수를 세는데 활용할 수 있다. 클래스 내부에서 static 변수를 선언하는 경우에는 초기화를 할 수 없기 때문에 외부에서 초기화를 진행한다. (기존에는 static은 따로 초기화를 하지 않아도 0으로 설정되었지만, 클래스는 그것이 이뤄지지 않음) static 변수를 이용하여 객체 개수 세기 #include using namespace std; class Ex { private: static int objectNum;// static 변수 public: Ex(); ~Ex(); }; int Ex::objectNum = 0; // static 변수 초기화 E..

    [C++] 오버로딩 (Overloading) - 1. 함수, 생성자

    오버로딩 (overloading) 같은 이름의 메소드(method) 또는 생성자를 매개변수의 개수나 타입을 다르게 지정함으로써 2개 이상 정의하는 것 함수 오버로딩 함수를 호출할 때 매개변수를 보고 동작을 결정한다. 컴파일러에서 함수를 오버로딩하는 과정은 다음과 같다. 1. 인자 타입이 일치하는 함수를 찾는다. 2. 일치하는 인자 타입이 없는 경우 다음과 같은 형변환을 통해 일치하는 함수를 찾는다. char, unsigned char, short ▶ int unsigned short ▶ int의 크기에 따라 int 혹은 unsigned int float ▶ double enum ▶ int 3.형변환 후에도 일치하는 인자가 없다면 좀더 포괄적으로 형변환을 진행하여 일치하는 함수를 찾는다. 임의의 숫자 타입..

    [C++] 생성자 (Constructor)

    생성자 객체의 생성과 동시에 멤버 변수를 초기화해주는 멤버 함수 멤버 변수 초기화가 중요한 이유 Ex) 멤버 변수 초기화를 하지 않은 경우 #include using namespace std; class Summ { private: int AccuSum; public: void sum(int a); }; void Summ::sum(int a) { AccuSum += a; cout

    [C++] 객체, 인스턴스, 클래스

    객체, 인스턴스, 클래스 OOP의 요소인 객체, 인스턴스, 클래스에 대해서 알아보자 클래스 - 붕어빵 틀 객체 - 붕어빵 (클래스라는 붕어빵 틀에서 나온 모든 붕어빵) 인스턴스 - 굽기, 팥의 양 등에 따라 맛이 다른 붕어빵들 ▶ 객체(붕어빵)를 인스턴스화(굽기, 팥의 양 등을 조절)한 것 일단은 이렇게만 알고 들어가자 객체 (object) OOP에서 클래스(class)가 실제로 구현된 인스턴스(instance) ▶ 클래스를 인스턴스화한 것 위 그림처럼 하나의 객체는 데이터와 함수를 모두 포함할 수 있다. ▶ 데이터와 함수를 각각, 인스턴스 변수(instance variable), 인스턴스 메소드(instance method)라고 한다. 그림을 보면 변수는 메소드라는 벽에 둘러싸여 보호받고 있다. 이는 ..