본문 바로가기

[ CODING STUDY ]/》C++ 정리33

C++ 12 [복사생성자] ▣ 객체 복사 방법 : Player p2(p1), Player p2 = p1; ▣ 복사생성자 임의로 정의 : Player::Player(const Player& player) ▣ 객체복사 시 자동으로 복사생성자 호출 ▣ 위에 코드처럼 복사생성자를 임의로 정의하지 않을 경우 디폴트 복사생성자 호출 this->level = player.level; 처럼 기본적으로 원본객체의 멤버변수 포인터를 사본 this객체에 복사 ▣ 복사 생성자를 호출하여 임의로 복사된 객체의 값을 변경할 수 있다. ▣ 객체를 복사할 경우, 객체를 매개변수로 받아올 경우, 객체를 반환할 경우 자동으로 복사생성자를 생성하고 호출한다. 2023. 4. 6.
C++ 11 [auto] ▣ C++ 11이후 버전 기준, auto 키워드는 자동으로 데이터타입을 정해준다. ▣ auto n1 = 10; : int형 데이터타입으로 자동으로 지정 ▣ typeid(변수이름).name() : 변수에 데이터타입 이름을 반환해 주는 함수 ▣ const auto n1 = 10; : const 키워드를 붙여서 지정하면 상수처럼 정의할 수 있다. ▣ auto& : 참조자나 포인터를 사용하여 선언 가능 ▣ auto n1 = player; : 클래스나 포인터를 auto 키워드로 선언할 수 있다. ▣ auto Player::lvUp(int level) : auto 키워드를 반환형으로 사용이 가능 ▣ auto 키워드를 사용해서 참조, 값, 객체를 반환할 수도 있다. ▣ void Player::lvUp(auto lev.. 2023. 4. 5.
C++ 10 [참조변수] ▣ & : 참조자 ▣ Player& p1 = player; : 참조변수 선언 및 초기화 ▣ Player& p1; : 참조변수는 선언할 때 초기화를 같이 진행해야 한다 그렇지 않으면 컴파일 오류 ▣ p1.lvUp(10); : 참조변수는 일반변수처럼 사용 가능해서 포인터처럼 -> 이 아닌 . 으로 접근 ▣ 값을 접근할 때 참조변수는 *p 포인터처럼 값을 접근할 때 마다 *를 붙이지 않아도 된다. 2023. 4. 4.
C++ 09 [call by value, call by reference] ▣ 변수나 객체를 매개변수로 전달하면 값에 의한 호출이 된다. ▣ 객체를 매개변수로 값을 전달하면 객체가 복사되어서 전달하기 때문에 전달한 함수에서 객체의 값을 바꾸어도 원본에는 지장이 없다. ▣ 매개변수 객체의 생성자는 호출되지 않고 소멸자만 컴파일에 의해 호출되고 소멸된다. ▣ 객체의 주소로 매개변수를 전달하면 주소의 의한 호출이 된다. ▣ 객체의 주소를 전달했기 때문에 호출된 함수에서 값을 변경하면 원본객체에 영향을 준다. ▣ 객체의 주소로 매개변수를 전달해도 원본 객체의 생성자와 소멸자만 호출된다. 2023. 3. 28.
C++ 08 [string] ▣ string 클래스를 사용을 사용하기 위해서는 #include 헤더가 있어야 한다. ▣ string str(문자열) : 괄호를 통해 초기화 가능 ▣ string *p = new string(문자열) : 메모리 할당으로 string 객체 사용 가능 ▣ string에 속해 있는 getline() 함수 ▣ getline(cin, str, '\n') : getline(cin, 입력받을 객체, 구분문자(구분문자까지 입력)) ▣ str2 = str1 : 대입연산자를 통해서 문자열을 치환(대입)해서 바꿀 수 있다. ▣ 대표적인 string 함수들 객체.append(연결 문자) : 문자열 연결 함수 반환형 객체.length() : 문자열 길이 함수 stoi(객체) : 숫자로 된 문자열을 숫자로 변환 함수 객체.cl.. 2023. 3. 28.
C++ 07 [this 포인터] ▣ this 포인터 : 객체 자신에 주소 포인터 ▣ this->num 코드는 test객체의 포인터(클래스 Test의 int num = 0)를 접근하여 대입 ▣ 클래스의 멤버함수와 생성자함수에서만 this 사용이 가능하다. ▣ 멤버변수와 멤버함수의 매개변수의 이름이 동일할 때 this로 객체 자신을 접근하여 사용한다. ▣ 멤버 함수에서 자신의 주소를 리턴해야 할 때 사용한다. ▣ this는 정적 멤버함수(static 함수)에서는 this를 사용할 수 없다. ▣ 멤버함수에서 객체의 주소를 this로 접근이 가능하다. ▣ 위에 코드를 풀어서 작성하면 이렇게 test.testfunc(&test, 10);처럼 주소를 매개변수로 전달하고 컴파일러가 void testfunc(Test* this, int num) 코드.. 2023. 3. 24.
C++ 06 [메모리 할당] https://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EB%A9%94%EB%AA%A8%EB%A6%AC_%ED%95%A0%EB%8B%B9 동적 메모리 할당 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 동적 메모리 할당 또는 메모리 동적 할당은 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 사용이 끝나면 운영체제가 쓸 ko.wikipedia.org ▣ 메모리 할당 : 필요한 메모리를 힙이라는 메모리 영역에서 가져와 사용하는 것 ▣ 동적메모리 : 상황에 따라 원하는 크기만큼의 메모리가 할당 가능 ▣ 정적메모리 : 메모리의 크기가 코딩되어 있어서 나중에 조절할 수 없다. ▣ 메모리 할당 방법 : 데이터타입 *포인터이.. 2023. 3. 24.
C++ 05 [객체배열] ▣ 객체배열 만들기 : 클래스이름 배열이름[크기]; ▣ 객체배열을 초기화하는 방법 : 클래스이름 배열이름[크기] = { 클래스이름(), 클래스이름(값)}; ▣ 객체배열 인덱스 수만큼 초기화를 해야 한다. ▣ Test() : 매개변수가 없는 생성자 호출 ▣ Test(10) : 매개변수가 있는 생성자 호출 ▣ 소멸자는 큰 숫자 인덱스부터 소멸한다. 그렇기 때문에 매개변수가 있는 소멸자가 먼저 호출되었다. 2023. 3. 24.
C++ 04 [인라인 함수] https://namu.wiki/w/%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9C 오버헤드 - 나무위키 이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권 namu.wiki ▣ 오버헤드 : 어떤 명령어를 처리하는데 소비되는 간접적, 추가적 컴퓨터 자원 ▣ 함수 호출 오버헤드 : 함수 호출에 따른 시간흐름 ▣ sum함수를 호출할 때 num1+num2 연산을 하는 시간보다 함수를 호출하는 시간, 리턴에 따른 시간이 더 많이 들어간다. 그렇기 때문에 짧은 코드 함수는 인라인 함수를 사용하면 속도해야 처리속도라 빨라진다. ▣ 인라인함수.. 2023. 3. 22.
C++ 03 [클래스, 멤버변수, 멤버함수, 생성자, 소멸자, 접근지정자] ▣ 클래스 : 설계도, 틀 ▣ 객체 : 설계도로 생성된 완성품 ▣ 클래스 선언 : class 클래스이름 { }; , class 키워드를 앞에 붙여야 한다. ▣ 멤버변수 : 클래스내부에서 선언하는 변수 ▣ 멤버함수 : 반환형 클래스이름::멤버함수이름(매개변수){ } 순으로 생성한다. , (::)는 범위지정연산자 ▣ 접근지정자 : public: 클래스 내부, 외부 모두 접근이 가능한 접근지정자 ▣ 객체생성 : 클래스이름(자료형) 변수이름;으로 지정한다. 구조체를 생성하는 것과 동일하다. ▣ p1.Damage(50); 객체에 접근할 때에는. 점을 사용한다. ▣ 생성자 : 객체가 생성될 때 자동으로 한번 호출되는 함수, 생성자는 클래스 이름과 동일하게 작성해야 한다. 생성자는 리턴 타입 반환형을 선언하지 않는다.. 2023. 3. 10.
C++ 02 [string, cin.getline(), width(), std::right, 정렬] ▣ : C언어 헤더는 c로 시작한다, C언어 string헤더 ▣ strcpy() : string을 복사하는 함수 ▣ : C++ string클래스 헤더파일 ▣ string : C++표준 라이브러리에서 제공하는 string클래스, 배열과 다르게 메모리 크기 제약이 없다., 쉽게 사용가능 ▣ getline() : 공백을 포함해서 입력받는 함수, getline(cin, 버퍼) ▣ cin.getline() : 공백을 포함한 지정한 문자까지 입력, getline(버퍼, 메모리크기, 입력받을 끝 문자) ▣ cin >> str >> str2 : 동시입력이 가능하다. ▣ cout.width() : 출력간격 ▣ std::right, std::left : 오른쪽정렬, 왼쪽정렬 2023. 3. 3.
C++ 01 [시작, 역사, 특징, 컴파일, 링킹, 디버깅, cout, cin, namespace] ▣ 소프트웨어 : 컴퓨터 프로그램과 데이터를 총칭하는 용어이다. ▣ 프로그래밍 : 컴퓨터가 처리할 작업 ▣ 프로그래밍 언어 : 컴퓨터 언어 https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D 컴퓨터 프로그래밍 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍(영어: computer programming) 또는 간단히 프로그래밍(programming, 문화어: 프로그램 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 ko.wikipedia.org ▣ 1972년 C언어 ▣ 1983년 C++ ▣ 1995년 Java ▣ .. 2023. 2. 28.