본문 바로가기

반응형

Programming

(115)
[C++] 08-03. 가상 소멸자 상.동.다 상속관계에서 생성자에서 동적할당을 할경우에 기초클래스의 멤버도 동적할당을 하기때문에 [다형성 특성] 모든 소멸자가 호출되기 위해서는 소멸자를 정의할 때 virtual로 선언. #include using namespace std; class First { private: char* strOne; public: First(const char* str) { strOne = new char[strlen(str) + 1]; } virtual ~First() { cout
[C++] 08-02. 가상함수 [급여관리 시스템 3단계] A클래스 : fct함수 ↑ B클래스 : fct함수, fct2함수 [함수 오버라이딩: 매개변수형이 동일한 함수를 생성] int main(void) { B obj; obj.fct(); //B의 fct 함수 호출, 오버라이딩에 의해 A의 fct함수가 가려짐 //만약에 B에 fct함수가 없다면, A의 fct함수 호출 } 포인터 관점 접근 int main(void) { B* b=new B(); b->fct(); //b의 fct함수 호출 A* a=b; //A의 클래스 포인터에 b를 저장 //b가 가리키는 모든 대상은 a를 상속하는 객체이며 //a의 포인터로 그 객체를 가리킬 수 있다. B* b=a; //컴파일 에러 발생 //a가 가리키는 대상은 a객체이거나 a가 상속하는 다른 클래스의 객체인데 //그 대상은 b객체..
[C++] 08-01. 객체 포인터의 참조관계 [급여관리 시스템 2단계] 객체의 주소 값을 저장 하는 객체 포인터 변수 "C++에서, AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다." 즉, 객체의 주소 값을 저장할 수 있다 class Student : public Person { ... }; class PartTimeStudent : public Student { ... }; Person
[C++] 07-04. 상속을 위한 최소한의 조건 상속의 기본 조건인 IS-A 관계의 성립 무선 전화기 is a 전화기 노트북 컴퓨터 is a 컴퓨터 -> 무선 전화기는 전화기의 기본 기능에 새로운 특성이 추가 -> 노트북 컴퓨터는 컴퓨터의 기본 기능에 새로운 특성이 추가 -> is-a 관계는 논리적으로 상속을 기반으로 표현 class computer {}; class NoteBookComp: public Computer {}; class TabletNotebook: public NotebookComp {}; 아래로 갈수록 구체화 위로 갈수록 일반화 [범주가 넓다.] //상속을 위한 최소한의 조건 #include #include using namespace std; class Computer { private: char owner[50]; public:..
[C++] 07-03. protected 선언과 세 가지 형태의 상속 protected로 선언된 멤버가 허용하는 접근의 범위 private < protected < public protected는 private과 동일하게 클래스 외부 접근 불가 private과 달리 상속관계에서의 접근을 허용 //private 상속과 protected 상속 #include using namespace std; class Base { private: int num1; protected: int num2; public: int num3; void ShowData() { cout
[C++] 07-02. 상속의 문법적인 이해 상속의 표현 A 아버지 B클래스의 멤버함수 내에서는 A클래스의 멤버함수나 멤버변수를 호출 가능 임의의 클래스 생성자 내에서는 임의의 클래스 내의 멤버를 모두 초기화 해야한다. -> 생성자의 존재 목적 생성자에서 동적할당 할 경우 소멸자에서 해제를 해야한다. -> 임의의 클래스 안에 있는 멤버를 다른 클래스 생성자에서 초기화 불가 A클래스의 멤버변수는 어디에서 초기화하는게 올바른가? -> 상속을 했다고 하더라도 원칙이 깨져서는 안된다. B클래스의 객체를 동적할당으로 생성 -> B클래스의 생성자만 호출하지만 A클래스의 멤버변수도 초기화가 되어야 한다. [같이 인자로 전달] 객체는 하나이지만, 두 개의 생성자를 호출 -> B클래스 내 생성자는 B클래스의 멤버변수를 초기화하고 -> A클래스 내 생성자는 A클래스..
[C++] 07-01. 상속에 대한 이해와 접근 [급여관리시스템 1단계] 상속에 대한 접근 1단계: 문제의 제시 2단계: 기본개념 소개 3단계: 문제의 해결 -> 상속은 기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소 급여관리 시스템 - 1단계 : 직원마다 각자의 객체를 생성 연봉제 정규직 [데이터 중심 클래스] 컨트롤 클래스 [컨트롤 클래스 객체를 통해서 프로그램이 동작] //상속을 하는 시기, 상속하는 이유, 상속의 장점 #include #include using namespace std; class PermanentWorker { private: char name[100]; int salary; public: PermanentWorker(const char* name, int money) //const char*로 선언 : salary(money) {..
[C++ 프로젝트] 은행계좌 관리 프로그램 Part. 05 클래스의 분류= 컨트롤클래스와 Entity 클래스 클래스의 기능을 관리, 제어하는 컨트롤 클래스의 적용 컨트롤 클래스의 특징 프로그램 전체의 기능을 담당한다. 기능적 성격이 강한 클래스 컨트롤 클래스만 봐도 프로그램의 전체 기능과 흐름을 파악할 수 있다. Entity 클래스의 특징 데이터적 성격이 강한 클래스 파일 및 데이터 베이스에 저장되는 데이터를 소유한다. 프로그램의 기능을 파악하는데는 관련이 없다 프로그램상에서 관리되는 데이터의 종류를 파악하는데 목적 은행계좌 관리시스템의 주요기능은 전역함수를 통해 구현되어 있다. C++에서는 전역함수와 전역변수의 선언을 허용하지만, 객체지향에는 전역이라는 개념은 존재하지 않는다. 때문에 컨트롤 클래스를 이용해 전역함수를 이용하지 않도록 하나의 컨트롤 클래스로 묶..

반응형