본문 바로가기

728x90
반응형

Programming

(117)
[C++] 09-02. 다중상속 다중상속 둘 이상의 클래스를 상속하는 형태로, 득보다 실이 많아 문제가 많으므로 자주 사용하지 않는 문법이다 다중상속을 하더라도 하나의 특성을 강하게 띄므로 IS-A 관계표현이 힘들어 부모의 특성을 단순히 재활용하는 경우에만 사용한다. //다중 상속 #include using namespace std; class BaseOne { public: void SimpleFuncOne() { cout
[C++] 09-01. 멤버함수와 가상함수의 동작 원리 멤버함수의 동작 #include using namespace std; class Data { private: int data; public: Data(int num):data(num) {} void ShowData() { cout
[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클래스..

728x90
반응형