분류 전체보기(50)
-
상속이란
파생 클래스의 인스턴스가 생성될 때 기본 클래스의 생성자도 호출된다 파생 클래스는 기본 클래스의 멤버에 접근할 수 있다. 단, private 접근 제어 지시자로 선언된 클래스 멤버에는 접근할 수 없다. 사용자 코드에서는 파생 클래스의 인스턴스를 통해 기본 클래스 메서드를 호출할 수 있다. #include using namespace std; class CMyData { public: CMyData() {cout
2024.03.27 -
임시 객체와 이동 시맨틱
변환 생성자가 묵시적으로 호출되는 것을 explicit 예약어로 막으려는 이유는 사용자 코드에서 보이지 않는 객체가 생성되고 소멸하는 것을 막기 위함입니다. 그런데 이보다 더 은밀한 임시 객체도 있습니다. 참고로 이런 일은 '함수의 반환 형식이 클래스인 경우'에 발생합니다. 이름 없는 임시 객체 존재하는 인스턴스지만 '식별자'가 부여되지 안흔 객체를 말합니다. #include using namespace std; class CTestData { public: CTestData(int nParam, char *pszName) : m_nData(nParam), m_pszName(pszName) { cout
2024.03.26 -
묵시적 변환 - 변환 생성자(Conversion Constructor)
#include using namespace std; class CTestData { public: //매개변수가 하나뿐인 생성자는 형변환이 가능하다. CTestData(int nParam) : m_nData(nParam) { cout
2024.03.25 -
대입 vs 복사
1. 대입 연산자(assignment operator) #include class MyClass { private: int data; public: MyClass(int value) : data(value) {} //대안 연산자 오버로딩 MyClass& operator=(const MyClass& other) { if(this != &other) {//자기 자신에게 대입되는 확인 this->data = other.data; } return *this; } void display() { std::cout
2024.03.22 -
Pass by value VS Pass by reference
1. 참조 형식 (Pass by Reference): 함수에 변수를 전달할 때 해당 변수에 대한 참조를 전달합니다. 함수 내에서 전달된 변수에 대한 변경이 가능하며, 이는 호출한 쪽에서도 영향을 미칩니다. 복사 생성자를 호출하지 않으므로 성능 면에서 유리할 수 있습니다. 주로 객체나 데이터 구조의 크기가 큰 경우에 사용됩니다. #include using namespace std; //배열을 참조로 전달하는 함수 void modifyArray(int (&arr)[5]) { for (int i =0; i
2024.03.21 -
대입 연산자
단순 대입 연산자는 구조체나 클래스에도 적용됩니다. 이때 기억해야 할 점은 기본적으로 단순 대입을 시도하면 얕은 복사가 수행된다는 점이다. 이를 해결하기 위해선 단순 대입 연산자의 동작 방식을 수정해야 한다. //단순 대입 연산자 함수를 정의한다 CMyData& operator=(const CMyData &rhs) { *m_pnData = *rhs.m_pnData; //객체 자신에 대한 참조 반환 return *this; } #include using namespace std; class CMyData { public: CMyData(int nParam) { m_pnData = new int; *m_pnData=nParam; } CMyData(const CMyData &rhs) { cout
2024.03.21