본문 바로가기

반응형

Programming/C++ 3

(19)
[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++에서는 전역함수와 전역변수의 선언을 허용하지만, 객체지향에는 전역이라는 개념은 존재하지 않는다. 때문에 컨트롤 클래스를 이용해 전역함수를 이용하지 않도록 하나의 컨트롤 클래스로 묶..
[C++ 프로젝트] 은행계좌 관리 프로그램 Part. 04 Account 클래스의 멤버함수에 const 선언을 추가해서 코드의 안전성을 높인다. #include #include #include using namespace std; const int NAME_LEN = 20; void ShowMenu(void);//메뉴출력 void MakeAccount(void);//계좌개설을 위한 함수 void DespositMoney(void);//입금 void WithdrawMoney(void);//출금 void ShowAllAccInfo(void);//잔액조회 enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE, EXIT }; class Account { private: int accID;//계좌번호 int balance;//잔 액 char* c..
[C++ 프로젝트] 은행계좌 관리 프로그램 Part. 03 Account 클래스에 깊은 복사를 진행하는 복사 생성자를 정의한다. Account 클래스에 깊은 복사를 진행하는 복사 생성자를 정의하면서, 복사 생성자가 호출되지는 않지만 깊은 복사를 원칙으로 정하고 복사 생성자를 추가한다. Account(const Account& ref) :accID(ref.accID), balance(ref.balance) { cusName = new char[strlen(ref.cusName) + 1]; strcpy_s(cusName,strlen(ref.cusName)+1,ref.cusName); } #include #include #include using namespace std; const int NAME_LEN = 20; void ShowMenu(void);//메뉴출력 v..
[C++ 프로젝트] 은행계좌 관리 프로그램 Part. 02 클래스의 대상과 클래스 구성 방법 Account 구조체의 cha형 배열 멤버를 Account 클래스에서 동적 할당으로 구현 -> 멤버변수로 문자열 포인터를 이용 객체 배열을 이용하지 않고, 객체 포인터 배열을 이용해 구현 #include #include #include using namespace std; const int NAME_LEN = 20; void ShowMenu(void);//메뉴출력 void MakeAccount(void);//계좌개설을 위한 함수 void DespositMoney(void);//입금 void WithdrawMoney(void);//출금 void ShowAllAccInfo(void);//잔액조회 enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE,..

반응형