일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- PCA
- 분류
- AI
- LG Aimers 4th
- Classification
- 티스토리챌린지
- 머신러닝
- regression
- Machine Learning
- 지도학습
- LLM
- 해커톤
- 회귀
- 딥러닝
- deep learning
- LG
- ChatGPT
- 오블완
- OpenAI
- LG Aimers
- GPT-4
- supervised learning
- gpt
- Today
- Total
목록전체 글 (354)
SYDev
const 객체와 const 객체의 특성들 const는 변수를 상수화 하듯이, 객체도 상수화할 수 있다. const int num = 10;// 변수 상수화 const SoSimple sim(20);// 객체 상수화 객체를 상수화한다는 것은 객체의 데이터 변경을 허용하지 않겠다는 뜻과 같다. 때문에 상수화된 객체를 대상으로는 const 멤버함수의 호출 이외에는 할 수 있는 것이 없다. 변경시킬 능력이 있는 함수는 아예 호출이 불가능하다는 것이. 예제를 통해 const 객체의 특성을 확인해보자. #include using namespace std; class SoSimple { private: int num; public: SoSimple(int n) : num(n) { } SoSimple& AddNum(..

복사 생성자의 호출 시점 앞선 게시글로 다음의 경우에 복사 생성자가 호출된다는 사실은 알게 되었다. Person man1("Lee dong woo", 29); Person man2 = man1; // 복사 생성자 호출 이 경우를 포함해서 복사 생성자가 호출되는 경우는 크게 3가지가 있다. case 1 : 기존에 생성된 객체를 이용해 새로운 객체를 초기화(위의 경우) case 2 : Call-by-value 방식의 함수 호출 과정에서 객체를 인자로 전달하는 경우 case 3 : 객체를 반환하되, 참조형으로 반환하지 않는 경우 + case 2 -> 함수가 호출될 때 매개변수에 메모리 공간이 할당되고 해당 공간에 전달된 인자가 저장(변수의 초기화)됨 + case 3 -> 함수가 값을 반환하면, 별도의 메모리 ..

디폴트 복사 생성자의 문제점 디폴트 복사 생성자는 멤버 대 멤버 복사를 진행한다. 그리고 이러한 복사 방식을 가리켜 '얕은 복사(shallow copy)'라고 하는데, 이 경우 멤버변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다. 다음 예제를 통해서 문제점을 확인해보자. 해당 예제는 생성자와 소멸자 파트에서 나왔던 Destructor.cpp의 main함수를 조금 수정한 것이다. #include #include using namespace std; class Person { private: char * name; int age; public: Person(char *myname, int myage) { int len=strlen(myname)+1; name=new char[len]; strcpy(n..
복사 생성자(Copy Constructor) 우리는 지금까지 다음 방식으로 변수와 참조자를 선언 및 초기화했다. int num = 20; int &ref = num; 하지만 C++에서는 다음과 방식으로도 선언 및 초기화가 가능하다. int num(20); int &ref(num); C++은 위와 같이 두 가지 초기화 방식을 동시에 지원하고 있다. 이어서 객체의 생성으로 넘어가보자. 아래에 간단한 클래스 하나가 있다. class SoSimple { private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1), num2(n2) { } void ShowSimpleData() { cout
객체배열 객체 기반의 배열은 다음 형태로 선언한다.(SoSimple은 클래스의 이름) SoSimple arr[10]; 이를 동적으로 할당하는 경우에는 다음의 형태가 된다. SoSimple * ptrArr = new SoSimple[10]; 이렇게 배열을 선언하면, 열 개의 SoSimple 클래스의 객체가 모여서 배열을 구성하는 형태가 된다. 이렇게 객체 기반 배열을 선언할 때도 생성자는 호출이 되는데, 이 경우에는 생성자에 직접 인자를 전달하지 못한다는 문제점이 생긴다. 그렇기 때문에 위 형태의 배열을 선언하기 위해서는 다음과 같은 형태의 생성자가 선언되어 있어야 한다. SoSimple() { . . . . } 이후에 각각의 요소를 원하는 값으로 초기화시키기 위해서는 각각의 객체에 별도로 초기화의 과정을..
문제 앞서 풀었던 문제 04-2의 모든 클래스에 생성자를 정의하라. 문제풀이 #include using namespace std; class Point { private: int xpos, ypos; public: Point(int x, int y) : xpos(x), ypos(y) { } void ShowPointInfo() const { cout
멤버 이니셜라이저를 이용한 변수 및 const 상수(변수) 초기화 '멤버 이니셜라이저'는 객체가 아닌 멤버의 초기화에도 사용할 수 있다. 이와 관련된 다음 코드를 살펴보자. class SoSimple { pirvate: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1) // 이니셜라이저(num1의 값을 n1로 초기화) { num2 = n2; } . . . . . } 다음 이니셜라이저는 num1의 값을 n1로 초기화하라는 의미이며 선언과 동시에 초기화되는 것과 같은 유형의 바이너리 코드를 구성하여 다음 문장과 비유할 수 있다. int num1 = n1; // 이니셜라이저 반면, 생성자의 몸체에 있는 초기화 문장은 다음과 같이 선언과 초기화가 ..
생성자(Constructor) 지금까지는 정보은닉을 위해서 객체 생성을 하기 전에 Init이라는 함수를 정의하고 호출했다. 그러나 매번 이같은 과정을 반복하기 불편하기 때문에 우리는 생성자(Constructor)라는 개념을 이용할 것이다. '생성자'를 통해서 우리는 객체의 생성과 동시에 초기화가 가능해진다. 다음은 생성자의 특징을 알아보기 위한 간단한 클래스이다. class SimpleClass { private: int num; public: SimpleClass(int n) //(생성자(constructor)) { num = n; } int GetNum() const { return num; } }; 위 클래스에서 SimpleClass라는 함수가 생성자(Constructor)이며 다음과 같은 특징을 ..