일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- regression
- 지도학습
- LLM
- ChatGPT
- 해커톤
- 딥러닝
- LG Aimers
- LG
- 머신러닝
- deep learning
- gpt
- OpenAI
- 회귀
- Machine Learning
- AI
- Classification
- supervised learning
- PCA
- 티스토리챌린지
- 분류
- LG Aimers 4th
- 오블완
- GPT-4
- Today
- Total
목록Programming Lang/C++ (65)
SYDev
멤버함수의 동작원리 멤버변수와 달리, 멤버함수는 객체 내부에 존재하는 것이 아니고 메모리의 한 공간에 별도로 존재한다. 해당 함수가 정의된 클래스의 모든 객체가 이 함수를 공유하는 형태이다. 가상함수의 동작원리와 가상함수 테이블 가상함수의 동작원리를 알아보기 위해 예제를 하나 살펴보자. #include using namespace std; class AAA { private: int num1; public: virtual void Func1() { cout
가상함수 말고도 virtual 키워드를 붙여줘야 할 대상이 하나 더 있는데, 그게 바로 소멸자이다. 가상 소멸자(Virtual Destructor) virtual로 선언된 소멸자를 '가상 소멸자'라 하는데 이것이 필요한 이유와 설명을 위해 예제를 하나 살펴보자. #include #include using namespace std; class First { private: char * strOne; public: First(char * str) { strOne = new char[strlen(str)+1]; } ~First() { cout
기초 클래스의 포인터로 객체를 참조하는 경우 우선 글을 시작하기 전에 핵심부터 말하고 시작하겠다. "C++ 컴파일러는 포인터 연산의 가능성 여부를 판단할 때, 포인터의 의 자료형을 기준으로 판단하지, 실제 가리키는 객체의 자료형을 기준으로 판단하지 않는다." 예를 들어서 BaseFunc 이라는 함수를 멤버로 가진 Base라는 기초 클래스와 DerivedFunc 이라는 함수를 가진 Derived라는 유도 클래스가 있다고 가정해보자. 그렇다면 다음 문장은 컴파일 에러를 일으킨다. Base * bptr = new Derived(); bptr -> DerivedFunc();//compile error 포인터 객체를 정의하고 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단한다.결론적으로 포인터 ..
객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수 C++에서, AAA형 포인터 변수는 AAA객체 or AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다(객체의 주소 값을 저장할 수 있다.) 다시 말해서 Person이라는 기초 클래스와 Student라는 유도 클래스, 추가적으로 Student를 상속하는 PartTimeStudent 클래스가 있다고 가정했을 때, 다음과 같은 문장들이 가능해진다. Person * ptr = new Student(); Person * ptr = new PartTimeStudent(); // 간접 상속의 경우에도 가능 Student * ptr = new PartTimeStudent(); 이와 관련된 다음 예제를 살펴보자. #include using n..
상속으로 클래스의 관계를 구성하기 위해서는 조건이 필요하다. 조건과 그에 따른 필요조건이 충족되지 않는다면, 상속은 하지 않는 것만 못하다. 상속을 위한 기본 조건인 IS-A 관계의 성립 IS-A 관계가 의미하는 것은 간단하다. 컴퓨터와 노트북 컴퓨터를 생각해보자. 노트북 컴퓨터는 컴퓨터의 특징을 모두 가지고 거기에 자신만의 "이동성"이라는 특징이 추가된다. 그렇기 때문에 노트북 컴퓨터는 일종의 컴퓨터라고 할 수 있다. 이를 바꿔서 말하면 "노트북 컴퓨터 is a 컴퓨터"라고 표현할 수 있는데, 여기서 사용되는 is a 라는 두 단어가 성립되는 관계가 IS-A관계이다. 이를 클래스의 개념에서 다시 살펴보자. 클래스 Computer와 이를 상속하는 NotebookComp가 있다면 둘은 IS-A 관계가 성립..
앞서 public과 private 선언에 대해 설명할 때 protected 선언은 상속과 관련있기 때문에 설명을 미뤘었다. 그렇다면 상속을 배웠으니 이제 protected 선언에 대해 공부해보자. protected로 선언된 멤버가 허용하는 접근의 범위 C++의 접근제어 지시자에는 private, protected, public 이렇게 세가지가 존재한다. 여기서 private이 허용하는 접근의 범위가 가장 좁고, public이 허용하는 범위가 가장 넓으며 protected는 그 중간의 범위에 해당한다. protected는 private과 거의 모든 부분에서 유사하지만, 단 한 가지 차이점이 있다. 바로 private 선언된 멤버변수는 유도 클래스에서 접근이 불가능하지만, protected 선언된 멤버변수는..
상속이란? "UnivdStudent 클래스가 Person 클래스를 상속한다." 라고 한다면 UnivStudent 클래스는 Person 클래스가 지니고 있는 모든 멤버를 물려받는다. 즉, UnivStudent 객체에는 UnivStudent 클래스에 선언된 멤버 뿐만 아니라 Person 클래스에 선언된 멤버도 존재하게 된다. 상속의 방법과 그 결과 예제를 통해서 상속의 방법과 결과를 확인해보자. 우슨 다음과 같이 Person 클래스를 정의하겠다. class Person { private: int age; //나이 char name[50]; //이름 public: Person(int myage, char * myname) : age(myage) { strcpy(name, myname); } void WhatY..
문제의 제시를 위한 시나리오의 도입 상속을 제대로 다루기 위해서 상속을 통해 해결할 문제부터 살펴보자. 다음 예제는 OrangeMedia라는 회사가 운영하는 '급여관리 시스템'이라는 가정이다. 회사가 이 시스템을 처음 도입할 때만 해도 직원의 근무형태는 '정규직(Permanent)' 하나였다. 따라서 이 시스템은 정규직 직원 관리를 위한 형태로 설계되었다. 그럼 일단 정규직 직원의 관리를 목적으로 정의된 클래스를 먼저 하나 보도록 하자. class PermanentWorker { private: char name[100]; int salary; // 매달 지불해야 하는 급여액 public: PermanentWorker(char * name, int money) : salary(money) { strcpy..