[C++] 멤버 초기자 리스트
·
C++/Basic
Queue::Queue(int qs) { front = rear = NULL; items = 0; qsize = qs;//허용되지않는다. qsize가 const일때 } 생성자를 호출하면 중괄호 안의 코드가 실행되기 전에 객체가 먼저 생성된다. 그래서 qsize에 초기화가 아닌 대입이 되어서 허용되지 않는다. Queue::Queue(int qs) : qsize(qs) { front = rear = NULL; items = 0; } - 위의 멤버 초기자 리스트를 사용하면 초기화를 할 수 있다. - : 초기화될 변수 이름(초기화할 변수 이름)으로 사용한다. - 생성자에서만 쓸 수 있다. - 참조로 선언된 클래스 멤버들에 대해서도 이 문법을 사용해야 된다. - 클래스내에서 초기화를 해놓았다면 멤버 초기자 리스트..
[C++] 대입 생성자
·
C++/Basic
대입에서 발생할 수도 있는 문제점은 타깃 객체가 이전에 대입한 데이터가 있을 때에 new로 선언된 부분이 있었다면 delete를 사용하여 해제를 해주어야한다. 만약 이 과정을 하지 않고 넘기게 된다면 메모리 누수가 생긴다. Test& operator=(const Test& t);//함수 원형 Test& Test::operator=(const Test& t)//대입하여 char* 형에 문장을 넣는다. { if (this == &t)//대입되는 객체가 자기 자신일 때는 바로 리턴한다. return *this; delete[] names; len = t.len; names = new char[len + 1]; strcpy_s(names, len + 1, t.names); return *this; }
[C++] 복사 생성자
·
C++/Basic
복사 생성자 복사 생성자는 어떤 객체를 새로 생성되는 객체에 복사하는데 사용된다. 복사 생성자는 일반적인 대입에 사용되는 것이 아니라 값 전달에 의한 함수 매개변수 전달을 포함한 초기화 작업에 사용된다. 클래스의 복사 생성자의 일반적인 원형 Class_name(const Class_name &); 복사 생성자는 언제 사용되는가? 새로운 객체가 생성되어 같은 종류의 기존의 객체로 초기화될 때마다 호출된다. 새로운 객체를 기존의 객체로 명시적으로 초기화할 때 생성되곤 한다. 다음과 같은 상황에서 복사 생성자는 사용된다. Class_name banana(apple); Class_name berry = nono; Class_name bus = Class_name(taxi); Class_name * market ..
[C++] 클래스의 데이터형 변환
·
C++/Basic
암시적 데이터형 변환 //Test.h class Test{ Test(); Test(double d); }; //Test.cpp Test::Test() { } Test::Test(double d) { } //Main.cpp int main() { Test save2; save2 = 19.6; } - Test(double d)는 double을 Test 객체로 변환하는 것이다. - 위의 메인에서 Test 객체를 생성하고 Test(double)을 사용하여 19.6을 Test로 변환한다. - 메인의 두번째 줄에서 Test(double)을 사용하여 Test 임시 객체를 생성한다. 이 때 19.6을 초기화 값으로 사용한다. 그리고나서 멤버별 대입으로 임시 객체의 내용을 save2에 복사하게된다. 이 과정을 명시적으로..
[C++] 연산자 오버로딩과 프렌드
·
C++/Basic
Test.h #pragma once class Test { public: Test(); Test(int h, int m); ~Test(); void Add(int h, int m); void Print(); void Reset() { minutes = 0; hours = 0; } Test operator+(const Test& t) const; private: int minutes; int hours; }; Test.cpp #include #include "Test.h" Test::Test() { minutes = 0, hours = 0; } Test::Test(int h, int m) : minutes(m), hours(h) { } Test::~Test() { } void Test::Add(int h,..
[C++] 열거체
·
C++/Basic
범위가 정해진 열거 class Stock { public: Stock(int x); ~Stock(); private: enum aa { egg, fire, gun }; enum bb { egg, fire, gun }; }; 다음과 같을 때 이미 aa에서의 내용들이 선언되어 있기 때문에 bb에서는 선언하지 못한다. enum class class Stock { public: Stock(int x); ~Stock(); private: enum class aa { egg, fire, gun }; enum class bb { egg, fire, gun }; }; - enum class를 사용하면 열거자에게 클래스 범위를 갖게하여 선언이 겹치지 않게 할 수 있다. - class 대신 struct를 사용할 수도 있다..