c++

    [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)라고 한다. 그림을 보면 변수는 메소드라는 벽에 둘러싸여 보호받고 있다. 이는 ..

    [C++] 객체 지향 프로그래밍

    객체 지향 프로그래밍 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. ▶ 객체: 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 절차적 프로그래밍 Procedure-Oriented Programming (POP) 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임의 일종 프로시저: 루틴, 하위프로그램, 서브루틴, 메서드, 함수라고도 하며, 수행되어야 할 연속적인 계산 과정을 포함한다. 프로그램의 아무 위치에서나 프로시..

    [C++] 동적 메모리 할당

    동적 메모리 할당 말 그대로 동적으로 메모리를 할당하는 것 메모리를 자유롭게 할당하고 해제할 수 있는 heap 공간을 이용한다. 자유롭게 할당할 수 있는 만큼 메모리 누수(memory leak)가 일어나지 않도록 해제를 꼭 제대로 해야함에 유의한다. 동적 메모리 할당하기 동적 메모리를 할당하기 위해 사용되는 키워드는 new와 delete이다. new는 동적 메모리를 할당하고, delete는 동적 메모리를 해제한다. 포인터에 동적 메모리 할당하기 포인터에 동적 메모리를 할당하는 방법은 다음과 같다. // 동적 메모리 할당 datatype* ptr = new datatype; // 동적 메모리 해제 delete ptr; Ex) 간단한 예제 #include using namespace std; int main..